memoscan
← all memos

Memo 0x1adc3994…b4153a on Ethereum

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","animation_url":"data:text/html;base64,PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9InJ1Ij4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CiAgPHRpdGxlPkNvc21pYyBOaWdodDwvdGl0bGU+CiAgPHN0eWxlPgogICAgaHRtbCwgYm9keSB7CiAgICAgIG1hcmdpbjogMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgYmFja2dyb3VuZDogIzBmMTUzNDsKICAgIH0KICAgIGNhbnZhcyB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQogIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CiAgPGNhbnZhcyBpZD0iZ2wiPjwvY2FudmFzPgogIDxzY3JpcHQ+CiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2wiKTsKICAgIGNvbnN0IGdsID0gY2FudmFzLmdldENvbnRleHQoIndlYmdsMiIpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCJ3ZWJnbCIpOwogICAgaWYgKCFnbCkgdGhyb3cgbmV3IEVycm9yKCJXZWJHTCBub3Qgc3VwcG9ydGVkIik7CiAgICBpZiAoImRyYXdpbmdCdWZmZXJDb2xvclNwYWNlIiBpbiBnbCkgZ2wuZHJhd2luZ0J1ZmZlckNvbG9yU3BhY2UgPSAiZGlzcGxheS1wMyI7CiAgICBjb25zdCBNQVhfTEFZRVJTID0gNDsKICAgIGNvbnN0IERZTkFNSUNfTEFZRVJfU0xPVFMgPSA0OwoKICAgIGNvbnN0IHZzID0gYAogICAgICBhdHRyaWJ1dGUgdmVjMiBhX3BvczsKICAgICAgdm9pZCBtYWluKCkgewogICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNChhX3BvcywgMC4wLCAxLjApOwogICAgICB9CiAgICBgOwoKICAgIGNvbnN0IGZzID0gYAogICAgICBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CiAgICAgIHVuaWZvcm0gdmVjMiB1X3JlczsKICAgICAgdW5pZm9ybSBmbG9hdCB1X3RpbWU7CiAgICAgIHVuaWZvcm0gaW50IHVfY29sQUFQaGFzZTsKICAgICAgY29uc3QgaW50IE1BWF9MQVlFUlMgPSAke01BWF9MQVlFUlN9OwogICAgICB1bmlmb3JtIHZlYzQgdV9sYXllcnNbTUFYX0xBWUVSU107CiAgICAgIHVuaWZvcm0gdmVjNCB1X2xheWVyQ29sb3JzW01BWF9MQVlFUlNdOwogICAgICB1bmlmb3JtIHZlYzIgdV9sYXllclBhcmFtc1tNQVhfTEFZRVJTXTsKICAgICAgdW5pZm9ybSB2ZWM0IHVfc3RhdGljU2hhcGVQYXJhbXNbNl07CiAgICAgIHVuaWZvcm0gdmVjMyB1X3N0YXRpY0NvbHNbMTddOwoKICAgICAgdmVjMyBwYWxldHRlKCBpbiBmbG9hdCB0ICkKewogICAgdmVjMyBhID0gdmVjMygwLjMxNzYsIDAuNDc4LCAwLjYxNTcpOwogICAgdmVjMyBiID0gdmVjMygwLjE1MSwgMC4xMzQ5LCAwLjI1NSk7CiAgICB2ZWMzIGMgPSB2ZWMzKDAuODQ3MSwgMC43MTc2LCAwLjk4ODIpOwogICAgdmVjMyBkID0gdmVjMyguNjQyLCAwLjQ0MiwgMC42NjcpOwogICAgcmV0dXJuIGEgKyBiKmNvcyggNi4yODMxOCooYyp0K2QpICk7Cn0KCiAgICAgIGZsb2F0IGJsb2IodmVjMiB1diwgdmVjMiBjLCB2ZWMyIHIsIGZsb2F0IGspIHsKICAgICAgICB2ZWMyIHAgPSAodXYgLSBjKSAvIHI7CiAgICAgICAgcmV0dXJuIGV4cCgtZG90KHAsIHApICogayk7CiAgICAgIH0KCiAgICAgIHZvaWQgbWFpbigpIHsKICAgICAgICB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gdV9yZXMueHk7CiAgICAgICAgdmVjMiB4eSA9IHV2OwogICAgICAgIHZlYzIgeHkyID0gdXY7CiAgICAgICAgdmVjMiB1dkRpYWcgPSB1djsKICAgICAgICB1dkRpYWcueSArPSBzaW4odXYueCAqIDUuNiArIDAuOCkgKiAwLjAyMDsKCiAgICAgICAgdmVjMyBjMSA9IHZlYzMoMC4wMTA3MSwgMC4wODYsIDAuMDEwOSk7CiAgICAgICAgdmVjMyBjMiA9IHBhbGV0dGUoeHkueSoyLit1X3RpbWUgKiAwLjA1KTsKICAgICAgICB2ZWMzIGMyMiA9IHBhbGV0dGUoMC4wMTUpOwogICAgICAgIHZlYzMgYzMgPSB2ZWMzKDAuNDEyLCAwLjIzNSwgMC42Myk7CgogICAgICAgIGMyMiA9IG1peChjMjIsIGMyLCBzaW4oeHkueSArIHVfdGltZSAqIDAuMjUpKTsKCiAgICAgICAgdmVjMyBiZzEgPSBjMTsKICAgICAgICB2ZWMzIGNkID0gYzI7CiAgICAgICAgdmVjMyBjbSA9IGMyMjsKCiAgICAgICAgZmxvYXQgZGVsdGEgPSBzaW4odV90aW1lICogMC4wMTUpICsgMS4wIC8gMi4wOwogICAgICAgIGZsb2F0IGgwMCA9IC4yNTsKICAgICAgICB2ZWMyIHJ4eSA9IHh5MjsKICAgICAgICByeHkueSArPSAuNDkgKiBjb3MoeHkyLnkgKiAzLjIpIC0gZGVsdGEgKiAwLjE7CiAgICAgICAgdmVjMiBjZW50ZXIgPSB2ZWMyKDAuNSwgMC42NSk7CiAgICAgICAgZmxvYXQgciA9IGxlbmd0aChyeHkgLSBjZW50ZXIpOwogICAgICAgIGgwMCA9IGNvcygyLjggKiByKTsKICAgICAgICBmbG9hdCBoID0gMC4wNTsKCiAgICAgICAgdmVjMyBjbWl4ID0gbWl4KGJnMSwgY20sIHh5LnggLyBoKTsKICAgICAgICB2ZWMzIGNtaXhBID0gbWl4KGNkLCBiZzEsIHh5LngpOwogICAgICAgIHZlYzMgY21peDAgPSBtaXgoY21peCwgY21peEEsICh4eS54IC0gaCkgLyAoMS4wIC0gaCkpOwogICAgICAgIHZlYzMgY29sQUEgPSBtaXgoCiAgICAgICAgICBtaXgoYzMsIGNtaXgwLCB4eS55IC8gaDAwKSwKICAgICAgICAgIG1peChjbWl4MCwgYzEsICh4eS55IC0gaDAwKSAvICgxLjAgLSBoMDApKSwKICAgICAgICAgIHN0ZXAoaDAwLCB4eS55KQogICAgICAgICk7CgogICAgICAgIHZlYzMgY29sID0gdV9zdGF0aWNDb2xzWzBdOwoKICAgICAgICB2ZWM0IGRpYWdvbmFsU2hhcGUgPSB1X3N0YXRpY1NoYXBlUGFyYW1zWzBdOwogICAgICAgIHZlYzQgbWlkQmx1ZVNoYXBlID0gdV9zdGF0aWNTaGFwZVBhcmFtc1sxXTsKCiAgICAgICAgZmxvYXQgZGlhZ29uYWxWaW9sZXQgPSBibG9iKHV2RGlhZywgZGlhZ29uYWxTaGFwZS54eSwgZGlhZ29uYWxTaGFwZS56dywgLjYpOwogICAgICAgIGNvbCA9IG1peChjb2wsIHVfc3RhdGljQ29sc1s0XSwgZGlhZ29uYWxWaW9sZXQgKiAwLjc4KTsKCiAgICAgICAgZmxvYXQgZHluYW1pY0xheWVySW5mbHVlbmNlID0gMC4wOwogICAgICAgIHZlYzMgZHluYW1pY0xheWVyQ29sb3JTdW0gPSB2ZWMzKDAuMCk7CiAgICAgICAgdmVjMiBkeW5hbWljTGF5ZXJDZW50ZXJTdW0gPSB2ZWMyKDAuMCk7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0xBWUVSUzsgaSsrKSB7CiAgICAgICAgICB2ZWM0IEwgPSB1X2xheWVyc1tpXTsKICAgICAgICAgIGlmIChMLnogPD0gMC4wIHx8IEwudyA8PSAwLjApIGNvbnRpbnVlOwogICAgICAgICAgdmVjMiBsdXYgPSB1dkRpYWc7CiAgICAgICAgICBmbG9hdCBwaCA9IHVfbGF5ZXJQYXJhbXNbaV0ueTsKICAgICAgICAgIGx1di55ICs9IHNpbigodXYueCArIHBoKSAqIDguOCkgKiAwLjAxMCArIHNpbigodXYueCAqIDEuOSAtIHBoKSAqIDEzLjApICogMC4wMDQ7CiAgICAgICAgICBmbG9hdCBtID0gYmxvYihsdXYsIEwueHksIEwuencsIHVfbGF5ZXJQYXJhbXNbaV0ueCk7CiAgICAgICAgICBmbG9hdCBhID0gY2xhbXAobSAqIHVfbGF5ZXJDb2xvcnNbaV0uYSwgMC4wLCAxLjApOwogICAgICAgICAgY29sID0gbWl4KGNvbCwgdV9sYXllckNvbG9yc1tpXS5yZ2IsIGEgKiAwLjg0KTsKCiAgICAgICAgICBmbG9hdCBsaW5rID0gbSAqIHVfbGF5ZXJDb2xvcnNbaV0uYTsKICAgICAgICAgIGR5bmFtaWNMYXllckluZmx1ZW5jZSArPSBsaW5rOwogICAgICAgICAgZHluYW1pY0xheWVyQ29sb3JTdW0gKz0gdV9sYXllckNvbG9yc1tpXS5yZ2IgKiBsaW5rOwogICAgICAgICAgZHluYW1pY0xheWVyQ2VudGVyU3VtICs9IEwueHkgKiBsaW5rOwogICAgICAgIH0KCiAgICAgICAgZmxvYXQgZHluYW1pY0xpbmtOID0gc21vb3Roc3RlcCgwLjAyLCAwLjc1LCBkeW5hbWljTGF5ZXJJbmZsdWVuY2UpOwogICAgICAgIHZlYzMgZHluYW1pY0xheWVyQ29sb3IgPSBkeW5hbWljTGF5ZXJDb2xvclN1bSAvIChkeW5hbWljTGF5ZXJJbmZsdWVuY2UgKyAwLjAwMDEpOwogICAgICAgIHZlYzIgZHluYW1pY0xheWVyQ2VudGVyID0gZHluYW1pY0xheWVyQ2VudGVyU3VtIC8gKGR5bmFtaWNMYXllckluZmx1ZW5jZSArIDAuMDAwMSk7CiAgICAgICAgdmVjMyBkeW5hbWljQ29sQUEgPSBjb2xBQTsKICAgICAgICBkeW5hbWljQ29sQUEgPSBtaXgoZHluYW1pY0NvbEFBLCBkeW5hbWljTGF5ZXJDb2xvciwgMC4xMiAqIGR5bmFtaWNMaW5rTik7CgogICAgICAgIGZsb2F0IHBoYXNlVCA9IChzaW4odV90aW1lICogMC4xNikgKyAxLjApICogMC41OwogICAgICAgIGZsb2F0IGNvbEFBVyA9IG1peCgwLjcyLCAwLjQ4LCBwaGFzZVQpOwogICAgICAgIGZsb2F0IGNvbEFBSCA9IG1peCgwLjM0LCAwLjIyLCBwaGFzZVQpOwogICAgICAgIGlmICh1X2NvbEFBUGhhc2UgPT0gMikgewogICAgICAgICAgY29sQUFXID0gbWl4KDAuNjQsIDAuNDQsIHBoYXNlVCk7CiAgICAgICAgICBjb2xBQUggPSBtaXgoMC4zOCwgMC4yNCwgcGhhc2VUKTsKICAgICAgICB9IGVsc2UgaWYgKHVfY29sQUFQaGFzZSA9PSAzKSB7CiAgICAgICAgICBjb2xBQVcgPSBtaXgoMC44MCwgMC41NiwgcGhhc2VUKTsKICAgICAgICAgIGNvbEFBSCA9IG1peCgwLjI4LCAwLjE4LCBwaGFzZVQpOwogICAgICAgIH0gZWxzZSBpZiAodV9jb2xBQVBoYXNlID09IDQpIHsKICAgICAgICAgIGNvbEFBVyA9IG1peCgwLjU4LCAwLjQwLCBwaGFzZVQpOwogICAgICAgICAgY29sQUFIID0gbWl4KDAuNDIsIDAuMjgsIHBoYXNlVCk7CiAgICAgICAgfQoKICAgICAgICB2ZWMyIGJhc2VDb2xBQUNlbnRlciA9IHZlYzIoMC41MiwgMC4yNiArIGRlbHRhICogMC4wOCk7CiAgICAgICAgdmVjMiBjb2xBQUNlbnRlciA9IG1peChiYXNlQ29sQUFDZW50ZXIsIGR5bmFtaWNMYXllckNlbnRlciwgMC4xNiAqIGR5bmFtaWNMaW5rTik7CiAgICAgICAgZmxvYXQgY29sQUFNYXNrID0gYmxvYih1diwgY29sQUFDZW50ZXIsIHZlYzIoY29sQUFXLCBjb2xBQUgpLCAyLjYpOwogICAgICAgIHZlYzIgYnJpZGdlQ2VudGVyID0gdmVjMihtaXgoMC41MiwgY29sQUFDZW50ZXIueCwgMC41KSwgbWl4KDAuMzgsIGNvbEFBQ2VudGVyLnksIDAuNTUpKTsKICAgICAgICBmbG9hdCBkeW5hbWljUGVuZXRyYXRpb24gPSBzbW9vdGhzdGVwKDAuMDgsIDAuOTAsIGNvbEFBTWFzayAqIDAuNjUpOwoKICAgICAgICBmbG9hdCBtaWRCbHVlTGFnID0gMC4xMCArIDAuMDQgKiBzaW4odV90aW1lICogMC4xMSAtIDEuMSk7CiAgICAgICAgdmVjMiBtaWRCbHVlVGFyZ2V0ID0gbWl4KG1pZEJsdWVTaGFwZS54eSwgY29sQUFDZW50ZXIsIDAuNDApOwogICAgICAgIHZlYzIgbWlkQmx1ZUNlbnRlciA9IG1peChtaWRCbHVlU2hhcGUueHksIG1pZEJsdWVUYXJnZXQsIDAuNzggLSBtaWRCbHVlTGFnKTsKICAgICAgICBmbG9hdCBtaWRCbHVlUGF0Y2ggPSBibG9iKHV2LCBtaWRCbHVlQ2VudGVyLCBtaWRCbHVlU2hhcGUuencsIDMuNik7CiAgICAgICAgY29sID0gbWl4KGNvbCwgdV9zdGF0aWNDb2xzWzldLCBtaWRCbHVlUGF0Y2ggKiAuNDgpOwoKICAgICAgICBjb2wgPSBtaXgoY29sLCBkeW5hbWljQ29sQUEsIDAuMjggKyBjb2xBQU1hc2sgKiAwLjUyKTsKICAgICAgICB2ZWMzIGZ1c2VkQ29sQUEgPSBkeW5hbWljQ29sQUEgKiAwLjY4OwogICAgICAgIGNvbCA9IG1peChjb2wsIGZ1c2VkQ29sQUEsIGR5bmFtaWNQZW5ldHJhdGlvbiAqIDAuNjIpOwoKICAgICAgICBmbG9hdCBjZW50ZXJTYXQgPSBibG9iKHV2LCB2ZWMyKDAuNTAsIDAuNDcpLCB2ZWMyKDAuNDQsIDAuMjQpLCAxLjgpOwogICAgICAgIGZsb2F0IHNhdEx1bWEgPSBkb3QoY29sLCB2ZWMzKDAuMjEyNiwgMC43MTUyLCAwLjA3MjIpKTsKICAgICAgICBjb2wgPSBtaXgodmVjMyhzYXRMdW1hKSwgY29sLCAxLjEwICsgY2VudGVyU2F0ICogMC4xOCk7CiAgICAgICAgY29sID0gcG93KGNsYW1wKGNvbCwgMC4wLCAxLjApLCB2ZWMzKC45MykpOwoKICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbCwgMS4wKTsKICAgICAgfQogICAgYDsKCiAgICBmdW5jdGlvbiBjb21waWxlKHR5cGUsIHNyYykgewogICAgICBjb25zdCBzaCA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTsKICAgICAgZ2wuc2hhZGVyU291cmNlKHNoLCBzcmMpOwogICAgICBnbC5jb21waWxlU2hhZGVyKHNoKTsKICAgICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2gsIGdsLkNPTVBJTEVfU1RBVFVTKSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihnbC5nZXRTaGFkZXJJbmZvTG9nKHNoKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHNoOwogICAgfQoKICAgIGNvbnN0IHByZyA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKICAgIGdsLmF0dGFjaFNoYWRlcihwcmcsIGNvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdnMpKTsKICAgIGdsLmF0dGFjaFNoYWRlcihwcmcsIGNvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCBmcykpOwogICAgZ2wubGlua1Byb2dyYW0ocHJnKTsKICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcmcsIGdsLkxJTktfU1RBVFVTKSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJnKSk7CiAgICB9CiAgICBnbC51c2VQcm9ncmFtKHByZyk7CgogICAgY29uc3QgcXVhZCA9IGdsLmNyZWF0ZUJ1ZmZlcigpOwogICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHF1YWQpOwogICAgZ2wuYnVmZmVyRGF0YSgKICAgICAgZ2wuQVJSQVlfQlVGRkVSLAogICAgICBuZXcgRmxvYXQzMkFycmF5KFstMSwgLTEsIDEsIC0xLCAtMSwgMSwgLTEsIDEsIDEsIC0xLCAxLCAxXSksCiAgICAgIGdsLlNUQVRJQ19EUkFXCiAgICApOwoKICAgIGNvbnN0IGFQb3MgPSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcmcsICJhX3BvcyIpOwogICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYVBvcyk7CiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGFQb3MsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CgogICAgY29uc3QgdVJlcyA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcmcsICJ1X3JlcyIpOwogICAgY29uc3QgdVRpbWUgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJnLCAidV90aW1lIik7CiAgICBjb25zdCB1TGF5ZXJzID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByZywgInVfbGF5ZXJzIik7CiAgICBjb25zdCB1TGF5ZXJDb2xvcnMgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJnLCAidV9sYXllckNvbG9ycyIpOwogICAgY29uc3QgdUxheWVyUGFyYW1zID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByZywgInVfbGF5ZXJQYXJhbXMiKTsKICAgIGNvbnN0IHVTdGF0aWNTaGFwZVBhcmFtcyA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcmcsICJ1X3N0YXRpY1NoYXBlUGFyYW1zIik7CiAgICBjb25zdCB1U3RhdGljQ29scyA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcmcsICJ1X3N0YXRpY0NvbHNbMF0iKTsKICAgIGNvbnN0IHVDb2xBQVBoYXNlID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByZywgInVfY29sQUFQaGFzZSIpOwoKICAgIGZ1bmN0aW9uIGhleFRvUmdiMDEoaGV4KSB7CiAgICAgIGNvbnN0IHMgPSBoZXgucmVwbGFjZSgiIyIsICIiKTsKICAgICAgY29uc3QgbiA9IHBhcnNlSW50KHMsIDE2KTsKICAgICAgcmV0dXJuIFsoKG4gPj4gMTYpICYgMjU1KSAvIDI1NSwgKChuID4+IDgpICYgMjU1KSAvIDI1NSwgKG4gJiAyNTUpIC8gMjU1XTsKICAgIH0KCiAgICBjb25zdCBwYWxldHRlTW9kZSA9ICJHIjsKICAgIGNvbnN0IGFjdGl2ZVBhbGV0dGUgPSBbCiAgICAgICAgaGV4VG9SZ2IwMSgiIzA1MGUzYiIpLAogICAgICAgIGhleFRvUmdiMDEoIiMwODFjNDQiKSwKICAgICAgICBoZXhUb1JnYjAxKCIjMDkyODYxIiksCiAgICAgICAgaGV4VG9SZ2IwMSgiIzA4M2M0ZiIpLAogICAgICAgIGhleFRvUmdiMDEoIiMwOTJiMmQiKSwKICAgICAgICBoZXhUb1JnYjAxKCIjMTYzNjU4IiksCiAgICAgICAgaGV4VG9SZ2IwMSgiIzA2MWYzOSIpLAogICAgICAgIGhleFRvUmdiMDEoIiNEN0RGRTYiKSwKICAgICAgICBoZXhUb1JnYjAxKCIjRTI2RUI1IiksCiAgICAgICAgaGV4VG9SZ2IwMSgiI2U5YjgxNCIpLAogICAgICAgIGhleFRvUmdiMDEoIiNkNDhkMjQiKSwKICAgICAgICBoZXhUb1JnYjAxKCIjMjI1YmFiIiksCiAgICAgICAgaGV4VG9SZ2IwMSgiIzExNzFkOSIpLAogICAgICAgIGhleFRvUmdiMDEoIiNhNmNlZWIiKSwKICAgICAgICBoZXhUb1JnYjAxKCIjMjhhN2EzIiksCiAgICAgICAgaGV4VG9SZ2IwMSgiIzNjYjA3ZSIpCiAgICBdOwogICAgY29uc3QgZmxvd01vZGUgPSBNYXRoLnJhbmRvbSgpIDwgMC41ID8gImRvd25mbG93IiA6ICJ1cGZsb3ciOwogICAgY29uc3QgY29sQUFQaGFzZSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDQpICsgMTsKCiAgICBmdW5jdGlvbiBjcmVhdGVEZWNrUGlja2VyKGNvbG9ycywgbWF4UmVwZWF0ID0gNCkgewogICAgICBsZXQgZGVjayA9IFtdOwogICAgICBmdW5jdGlvbiByZWZpbGwoKSB7CiAgICAgICAgZGVjayA9IFtdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBmb3IgKGxldCByID0gMDsgciA8IG1heFJlcGVhdDsgcisrKSBkZWNrLnB1c2goY29sb3JzW2ldKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmVmaWxsKCk7CiAgICAgIHJldHVybiBmdW5jdGlvbiBwaWNrKCkgewogICAgICAgIGlmIChkZWNrLmxlbmd0aCA9PT0gMCkgcmVmaWxsKCk7CiAgICAgICAgY29uc3QgaWR4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZGVjay5sZW5ndGgpOwogICAgICAgIGNvbnN0IGMgPSBkZWNrW2lkeF07CiAgICAgICAgZGVjay5zcGxpY2UoaWR4LCAxKTsKICAgICAgICByZXR1cm4gYzsKICAgICAgfTsKICAgIH0KCiAgICBjb25zdCBwaWNrU3RhdGljQ29sb3IgPSBjcmVhdGVEZWNrUGlja2VyKGFjdGl2ZVBhbGV0dGUsIDQpOwogICAgY29uc3QgcGlja0R5bmFtaWNDb2xvciA9IGNyZWF0ZURlY2tQaWNrZXIoYWN0aXZlUGFsZXR0ZSwgNCk7CgogICAgZnVuY3Rpb24gcmFuZChtaW4sIG1heCkgewogICAgICByZXR1cm4gbWluICsgTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pOwogICAgfQoKICAgIGZ1bmN0aW9uIHBpY2tTdGVwcGVkVmFsdWUobWluLCBtYXgsIHN0ZXApIHsKICAgICAgY29uc3QgY291bnQgPSBNYXRoLmZsb29yKChtYXggLSBtaW4pIC8gc3RlcCkgKyAxOwogICAgICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY291bnQpICogc3RlcDsKICAgIH0KCiAgICBmdW5jdGlvbiBzbW9vdGhzdGVwMDEoZWRnZTAsIGVkZ2UxLCB4KSB7CiAgICAgIGNvbnN0IHQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCAoeCAtIGVkZ2UwKSAvIChlZGdlMSAtIGVkZ2UwKSkpOwogICAgICByZXR1cm4gdCAqIHQgKiAoMyAtIDIgKiB0KTsKICAgIH0KCiAgICBmdW5jdGlvbiB0aW50ZWRDb2xvcihiYXNlLCBzcHJlYWQgPSAwLjA1KSB7CiAgICAgIHJldHVybiBbCiAgICAgICAgTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgYmFzZVswXSArIHJhbmQoLXNwcmVhZCwgc3ByZWFkKSkpLAogICAgICAgIE1hdGgubWluKDEsIE1hdGgubWF4KDAsIGJhc2VbMV0gKyByYW5kKC1zcHJlYWQsIHNwcmVhZCkpKSwKICAgICAgICBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBiYXNlWzJdICsgcmFuZCgtc3ByZWFkLCBzcHJlYWQpKSkKICAgICAgXTsKICAgIH0KCiAgICBmdW5jdGlvbiBwaWNrRHluYW1pY0NvbG9yUmFuZG9tKCkgewogICAgICBjb25zdCBjb2xvckJhc2UgPSBwaWNrRHluYW1pY0NvbG9yKCk7CiAgICAgIHJldHVybiB0aW50ZWRDb2xvcihjb2xvckJhc2UsIDAuMDYpOwogICAgfQoKICAgIGZ1bmN0aW9uIHNldFN0YXRpY0NvbG9yKGluZGV4LCBjb2xvcikgewogICAgICBjb25zdCBiYXNlID0gaW5kZXggKiAzOwogICAgICBzdGF0aWNDb2xzW2Jhc2VdID0gY29sb3JbMF07CiAgICAgIHN0YXRpY0NvbHNbYmFzZSArIDFdID0gY29sb3JbMV07CiAgICAgIHN0YXRpY0NvbHNbYmFzZSArIDJdID0gY29sb3JbMl07CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U3RhdGljQ29sb3IoaW5kZXgpIHsKICAgICAgY29uc3QgYmFzZSA9IGluZGV4ICogMzsKICAgICAgcmV0dXJuIFtzdGF0aWNDb2xzW2Jhc2VdLCBzdGF0aWNDb2xzW2Jhc2UgKyAxXSwgc3RhdGljQ29sc1tiYXNlICsgMl1dOwogICAgfQoKICAgIGZ1bmN0aW9uIGNvbG9yc0VxdWFsKGEsIGIpIHsKICAgICAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdOwogICAgfQoKICAgIGZ1bmN0aW9uIHBpY2tEaWZmZXJlbnRQYWxldHRlQ29sb3IoY3VycmVudENvbG9yKSB7CiAgICAgIGlmIChhY3RpdmVQYWxldHRlLmxlbmd0aCA8PSAxKSByZXR1cm4gY3VycmVudENvbG9yLnNsaWNlKCk7CiAgICAgIGxldCBuZXh0Q29sb3IgPSBjdXJyZW50Q29sb3Iuc2xpY2UoKTsKICAgICAgd2hpbGUgKGNvbG9yc0VxdWFsKG5leHRDb2xvciwgY3VycmVudENvbG9yKSkgewogICAgICAgIG5leHRDb2xvciA9IHBpY2tTdGF0aWNDb2xvcigpLnNsaWNlKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5leHRDb2xvcjsKICAgIH0KCiAgICBjb25zdCBTVEFUSUNfQ09MU19DT1VOVCA9IDE3OwogICAgY29uc3Qgc3RhdGljQ29scyA9IG5ldyBGbG9hdDMyQXJyYXkoU1RBVElDX0NPTFNfQ09VTlQgKiAzKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgU1RBVElDX0NPTFNfQ09VTlQ7IGkrKykgewogICAgICBjb25zdCBjID0gcGlja1N0YXRpY0NvbG9yKCk7CiAgICAgIHN0YXRpY0NvbHNbaSAqIDNdID0gY1swXTsKICAgICAgc3RhdGljQ29sc1tpICogMyArIDFdID0gY1sxXTsKICAgICAgc3RhdGljQ29sc1tpICogMyArIDJdID0gY1syXTsKICAgIH0KICAgIHN0YXRpY0NvbHMuc2V0KHBpY2tTdGF0aWNDb2xvcigpLCAxNSAqIDMpOwogICAgc3RhdGljQ29scy5zZXQocGlja1N0YXRpY0NvbG9yKCksIDE2ICogMyk7CgogICAgc2V0U3RhdGljQ29sb3IoMCwgaGV4VG9SZ2IwMSgiIzA5MmIyZCIpKTsKICAgIHNldFN0YXRpY0NvbG9yKDQsIGhleFRvUmdiMDEoIiMwNTBlM2IiKSk7CiAgICBzZXRTdGF0aWNDb2xvcig5LCBoZXhUb1JnYjAxKCIjMDYxZjM5IikpOwoKICAgIGNvbnN0IGFuaW1hdGVkU3RhdGljSW5kaWNlcyA9IFswLCA0LCA5XTsKICAgIGNvbnN0IHN0YXRpY0NvbG9yQW5pbWF0aW9uRGVsYXkgPSA2MC4wOwogICAgY29uc3Qgc3RhdGljQ29sb3JBbmltYXRpb25EdXJhdGlvbiA9IDE1LjA7CiAgICBjb25zdCBzdGF0aWNDb2xvckN5Y2xlID0gewogICAgICBzdGFydGVkOiBmYWxzZSwKICAgICAgY3VycmVudEluZGV4OiAwLAogICAgICBtaXg6IDAsCiAgICAgIGZyb21Db2xvcjogbnVsbCwKICAgICAgdG9Db2xvcjogbnVsbAogICAgfTsKCiAgICBmdW5jdGlvbiBzdGFydE5leHRTdGF0aWNDb2xvclRyYW5zaXRpb24oKSB7CiAgICAgIGNvbnN0IHN0YXRpY0luZGV4ID0gYW5pbWF0ZWRTdGF0aWNJbmRpY2VzW3N0YXRpY0NvbG9yQ3ljbGUuY3VycmVudEluZGV4XTsKICAgICAgY29uc3QgZnJvbUNvbG9yID0gZ2V0U3RhdGljQ29sb3Ioc3RhdGljSW5kZXgpOwogICAgICBzdGF0aWNDb2xvckN5Y2xlLnN0YXJ0ZWQgPSB0cnVlOwogICAgICBzdGF0aWNDb2xvckN5Y2xlLm1peCA9IDAuMDsKICAgICAgc3RhdGljQ29sb3JDeWNsZS5mcm9tQ29sb3IgPSBmcm9tQ29sb3I7CiAgICAgIHN0YXRpY0NvbG9yQ3ljbGUudG9Db2xvciA9IHBpY2tEaWZmZXJlbnRQYWxldHRlQ29sb3IoZnJvbUNvbG9yKTsKICAgIH0KCiAgICBjb25zdCBzdGF0aWNTaGFwZVBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkoWwogICAgICAwLjUyLCAwLjE4LCAxLjAwLCAwLjQwLAogICAgICAwLjUyLCAwLjMyLCAwLjUwLCAwLjMxLAogICAgICAwLjUwLCAwLjU2LCAwLjQ2LCAwLjMwLAogICAgICAwLjU2LCAwLjMwLCAwLjUyLCAwLjE4LAogICAgICAwLjUyLCAwLjE2LCAwLjY0LCAwLjIyLAogICAgICAwLjA4LCAwLjA3LCAwLjI2LCAwLjE4CiAgICBdKTsKICAgIGNvbnNvbGUubG9nKCJDb3NtaWMgTmlnaHQgYnkgQW50b24gRHVicm92aW4gKE1DSFgpLCAyMDI2Iik7CgogICAgY29uc3QgbGF5ZXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogTUFYX0xBWUVSUyB9LCAoKSA9PiAoewogICAgICBhY3RpdmU6IGZhbHNlLAogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICBhZ2U6IDAsCiAgICAgIHNjYWxlOiAxLAogICAgICBzeDogMCwKICAgICAgc3k6IDAsCiAgICAgIHNwZWVkOiAwLAogICAgICBrOiAyLAogICAgICBwaGFzZTogMCwKICAgICAgYmFzZUludGVuc2l0eTogMC42LAogICAgICBpbnRlbnNpdHk6IDAuMCwKICAgICAgY29sb3I6IFsxLCAxLCAxXQogICAgfSkpOwoKICAgIGZ1bmN0aW9uIHNwYXduTGF5ZXIoaW5kZXgsIHsgaW1tZWRpYXRlID0gZmFsc2UgfSA9IHt9KSB7CiAgICAgIGNvbnN0IHN4ID0gZmxvd01vZGUgPT09ICJ1cGZsb3ciID8gcmFuZCgwLjI0LCAwLjQwKSA6IHJhbmQoMC4yOCwgMC40Nik7CiAgICAgIGNvbnN0IHN5ID0gZmxvd01vZGUgPT09ICJ1cGZsb3ciID8gcmFuZCgwLjEyLCAwLjI0KSA6IHJhbmQoMC4xNiwgMC4zNCk7CiAgICAgIGNvbnN0IHlKaXR0ZXIgPSByYW5kKC0wLjAzLCAwLjAzKTsKICAgICAgY29uc3QgeVN0YXJ0ID0gZmxvd01vZGUgPT09ICJ1cGZsb3ciCiAgICAgICAgPyAwLjI0ICsgeUppdHRlcgogICAgICAgIDogKGltbWVkaWF0ZSA/IDEuMDIgKyB5Sml0dGVyIDogMS4wICsgc3kgKyByYW5kKDAuMDQsIDAuMjQpKTsKCiAgICAgIGxheWVyc1tpbmRleF0uYWN0aXZlID0gdHJ1ZTsKICAgICAgbGF5ZXJzW2luZGV4XS5zeCA9IHN4OwogICAgICBsYXllcnNbaW5kZXhdLnN5ID0gc3k7CiAgICAgIGxheWVyc1tpbmRleF0ueCA9IHJhbmQoMC4yNiwgMC43NCk7CiAgICAgIGxheWVyc1tpbmRleF0ueSA9IHlTdGFydDsKICAgICAgbGF5ZXJzW2luZGV4XS5hZ2UgPSAwLjA7CiAgICAgIGxheWVyc1tpbmRleF0uc2NhbGUgPSBmbG93TW9kZSA9PT0gInVwZmxvdyIgPyAwLjAgOiAxLjA7CiAgICAgIGxheWVyc1tpbmRleF0uc3BlZWQgPSBmbG93TW9kZSA9PT0gInVwZmxvdyIgPyByYW5kKDAuMDEwLCAwLjAyMSkgOiByYW5kKDAuMDE2LCAwLjAzMSk7CiAgICAgIGxheWVyc1tpbmRleF0uayA9IHJhbmQoMy44LCA2LjIpOwogICAgICBsYXllcnNbaW5kZXhdLnBoYXNlID0gTWF0aC5yYW5kb20oKSAqIDEwLjA7CiAgICAgIGxheWVyc1tpbmRleF0uYmFzZUludGVuc2l0eSA9IHJhbmQoMC40NCwgMC44Mik7CiAgICAgIGxheWVyc1tpbmRleF0uaW50ZW5zaXR5ID0gMC4wOwogICAgICBsYXllcnNbaW5kZXhdLmNvbG9yID0gcGlja0R5bmFtaWNDb2xvclJhbmRvbSgpOwogICAgfQoKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAgICAgIHNwYXduTGF5ZXIoaSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7CiAgICAgIGxheWVyc1tpXS54ICs9IGkgKiAwLjEwOwogICAgfQoKICAgIHNldEludGVydmFsKCgpID0+IHsKICAgICAgaWYgKGZsb3dNb2RlID09PSAidXBmbG93IikgewogICAgICAgIGNvbnN0IGFjdGl2ZUNvdW50ID0gbGF5ZXJzLnNsaWNlKDAsIERZTkFNSUNfTEFZRVJfU0xPVFMpLnJlZHVjZSgobiwgbCkgPT4gbiArIChsLmFjdGl2ZSA/IDEgOiAwKSwgMCk7CiAgICAgICAgaWYgKGFjdGl2ZUNvdW50ID49IDMpIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBpZHggPSBsYXllcnMuc2xpY2UoMCwgRFlOQU1JQ19MQVlFUl9TTE9UUykuZmluZEluZGV4KChsKSA9PiAhbC5hY3RpdmUpOwogICAgICBpZiAoaWR4ICE9PSAtMSkgc3Bhd25MYXllcihpZHgpOwogICAgfSwgMjgwMCk7CgogICAgbGV0IGxhc3RUaW1lID0gMDsKCiAgICBmdW5jdGlvbiBkcmF3KG5vd01zKSB7CiAgICAgIGNvbnN0IG5vdyA9IG5vd01zICogMC4wMDE7CiAgICAgIGNvbnN0IGR0ID0gTWF0aC5taW4oMC4wNSwgTWF0aC5tYXgoMC4wLCBub3cgLSBsYXN0VGltZSkpOwogICAgICBsYXN0VGltZSA9IG5vdzsKCiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgRFlOQU1JQ19MQVlFUl9TTE9UUzsgaSsrKSB7CiAgICAgICAgY29uc3QgbCA9IGxheWVyc1tpXTsKICAgICAgICBpZiAoIWwuYWN0aXZlKSBjb250aW51Z