solc-0.8.36-doubleshift20 0x7d4e742018fb52e48b08be73d041c18b21de6fb5 via-ir-low-runs

18122 bytes

60806040526004361015610011575f80fd5b5f3560e01c80630a756983146103045780630eafb25b146102ff578063181f5a77146102fa57806322adbc78146102f557806329937268146102f0578063313ce567146102eb5780634fb17470146102e657806350d25bcd146102e157806354fd4d50146102dc578063643dc105146102d7578063666cab8d146102d2578063668a0f02146102cd5780636b14daf8146102c857806370da2f67146102c35780637284e416146102be57806379ba5097146102b95780638038e4a1146102b457806381ff7048146102af5780638205bf6a146102aa5780638823da6c146102a55780638ac28d5a146102a05780638da5cb5b1461029b57806398e5b12a146102965780639a6fc8f5146102915780639bd2c0b11461028c5780639c849b30146102875780639e3ceeab14610282578063a118f2491461027d578063afcb95d714610278578063b121e14714610273578063b1dc65a41461026e578063b5ab58dc14610269578063b633620c14610264578063c10753291461025f578063c4c92b371461025a578063d09dc33914610255578063daffc4b514610250578063dc7f01241461024b578063e3d0e71214610246578063e4902f8214610241578063e5fe45771461023c578063e76d516814610237578063eb45716314610232578063eb5dcd6c1461022d578063f2fde38b14610228578063fbffd2c1146102235763feaf968c1461021e575f80fd5b611d6d565b611cef565b611c2e565b611b33565b6119fd565b6119d5565b6118df565b6118aa565b6117ff565b611739565b611711565b611681565b611659565b6114ba565b61148c565b61145e565b6113b7565b6112df565b61129f565b611210565b611192565b611056565b610feb565b610f9b565b610e1d565b610df6565b610d5e565b610cd9565b610c94565b610c5e565b610c08565b610b4c565b610a4d565b610a10565b6109be565b61081d565b6107ee565b610603565b6105da565b61058a565b61054e565b610511565b6104bf565b61044e565b6103de565b610377565b34610356575f3660031901126103565761031c61345e565b60155460ff811661032957005b60ff19166015557f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f5396385f80a1005b5f80fd5b6001600160a01b031690565b6001600160a01b0381160361035657565b3461035657602036600319011261035657602061039e60043561039981610366565b611f71565b604051908152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9060206103db9281815201906103a6565b90565b34610356575f3660031901126103565761044a6040516103ff6060826108bd565b602481527f416363657373436f6e74726f6c6c65644f43523241676772656761746f72203160208201526302e302e360e41b60408201526040519182916020835260208301906103a6565b0390f35b34610356575f3660031901126103565760206040517f000000000000000000000000000000000000000000000000000000000000000060170b8152f35b63ffffffff9182168152918116602083015291821660408201529116606082015262ffffff91909116608082015260a00190565b34610356575f3660031901126103565761044a600b54604051918162ffffff849360d01c169063ffffffff8160b01c169063ffffffff8160901c169063ffffffff808260701c169160501c168661048b565b34610356575f36600319011261035657602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103565760403660031901126103565761058860043561056e81610366565b6024359061057b82610366565b61058361345e565b6120f9565b005b34610356575f366003190112610356576105b56105b06105aa3636610939565b33612382565b612277565b63ffffffff600b5460301c165f52600c602052602060405f205460170b604051908152f35b34610356575f36600319011261035657602060405160068152f35b63ffffffff81160361035657565b346103565760a036600319011261035657600435610620816105f5565b60243561062c816105f5565b60443591610639836105f5565b606435610645816105f5565b6084359062ffffff821682036103565761066060125461035a565b5f5490959061067c906001600160a01b031661035a565b61035a565b331495861561071c575b509061071792916106a45f5160206146aa5f395f51905f52976122e6565b6106ac613657565b600b805462ffffff60d01b60d086901b16600160501b600160e81b031990911663ffffffff60501b605089901b161763ffffffff60701b60708a901b161763ffffffff60901b609085901b161763ffffffff60b01b60b086901b16171790556040519586958661048b565b0390a1005b9550919060206040518097630d629b5f60e31b825281806107413633600484016122af565b03916001600160a01b03165afa9283156107ad576106a4610717945f5160206146aa5f395f51905f52985f9161077e575b50975050909192610686565b6107a0915060203d6020116107a6575b61079881836108bd565b81019061207a565b5f610772565b503d61078e565b61206f565b90602080835192838152019201905f5b8181106107cf5750505090565b82516001600160a01b03168452602093840193909201916001016107c2565b34610356575f3660031901126103565761044a610809612331565b6040519182916020835260208301906107b2565b34610356575f3660031901126103565761083d6105b06105aa3636610939565b602063ffffffff600b5460301c16604051908152f35b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b0382111761088257604052565b610853565b604081019081106001600160401b0382111761088257604052565b608081019081106001600160401b0382111761088257604052565b601f909101601f19168101906001600160401b0382119082101761088257604052565b604051906108ef6040836108bd565b565b604051906108ef60c0836108bd565b604051906108ef6060836108bd565b604051906108ef6080836108bd565b6001600160401b03811161088257601f01601f191660200190565b9190916109458161091e565b61095260405191826108bd565b809382825282116103565781815f9384602080950137010152565b9291926109798261091e565b9161098760405193846108bd565b829481845281830111610356578281602093845f960137010152565b9080601f83011215610356578160206103db9335910161096d565b34610356576040366003190112610356576004356109db81610366565b6024356001600160401b03811161035657602091610a00610a069236906004016109a3565b90612382565b6040519015158152f35b34610356575f3660031901126103565760206040517f000000000000000000000000000000000000000000000000000000000000000060170b8152f35b34610356575f36600319011261035657610a6d6105b06105aa3636610939565b6040515f6010548060011c9060018116908115610b42575b602083108214610b2e578285526020850191908115610b155750600114610ac3575b61044a84610ab7818603826108bd565b604051918291826103ca565b60105f9081529250907f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6725b818410610b0157505001610ab782610aa7565b805484840152602090930192600101610aee565b60ff191682525090151560051b019050610ab782610aa7565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610a85565b34610356575f366003190112610356576001546001600160a01b03163303610bca57610b785f5461035a565b5f80546001600160a01b03191633179055600180546001600160a01b031916905533906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b60405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606490fd5b34610356575f36600319011261035657610c2061345e565b60155460ff811615610c2e57005b60ff19166001176015557faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c34805f80a1005b34610356575f366003190112610356576060600d54600a5463ffffffff60405192818116845260201c1660208301526040820152f35b34610356575f36600319011261035657610cb46105b06105aa3636610939565b63ffffffff600b5460301c165f52600c602052602060405f205460e01c604051908152f35b3461035657602036600319011261035657600435610cf681610366565b610cfe61345e565b6001600160a01b03165f8181526016602052604090205460ff16610d1e57005b6020817f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d1925f526016825260405f2060ff198154169055604051908152a1005b3461035657602036600319011261035657600435610d7b81610366565b6001600160a01b038181165f90815260136020526040902054163303610da45761058890613816565b60405162461bcd60e51b81526020600482015260176024820152764f6e6c792070617965652063616e20776974686472617760481b6044820152606490fd5b6001600160a01b03909116815260200190565b34610356575f366003190112610356575f546040516001600160a01b039091168152602090f35b34610356575f36600319011261035657610e3a6106775f5461035a565b33148015610efc575b610e4c906123c4565b61044a610ee2610eac600b54610e73610e6d8264ffffffffff9060081c1690565b91611eaa565b907f41e3990591fd372502daa15842da15bc7f41c75309ab3ff4f56f1848c178825c600a54610eb5610eac8463ffffffff9060081c1690565b63ffffffff1690565b6040805192835263ffffffff91909116602083015260ff93909316928101929092523391606090a2612410565b6040516001600160501b0390911681529081906020820190565b50610f0b610677600f5461035a565b60206040518092630d629b5f60e31b82528180610f2c3633600484016122af565b03915afa80156107ad57610e4c915f91610f49575b509050610e43565b610f62915060203d6020116107a65761079881836108bd565b5f610f41565b6001600160501b039182168152602081019290925260408201929092526060810192909252909116608082015260a00190565b34610356576020366003190112610356576004356001600160501b038116810361035657610fdb61044a91610fd66105b06105aa3636610939565b613917565b9160409593955195869586610f68565b34610356575f366003190112610356576040611005612428565b63ffffffff602060018060a01b038351169201511682519182526020820152f35b9181601f84011215610356578235916001600160401b038311610356576020808501948460051b01011161035657565b34610356576040366003190112610356576004356001600160401b03811161035657611086903690600401611026565b906024356001600160401b038111610356576110a6903690600401611026565b6110ae61345e565b6110b9818514612454565b5f5b8481106110c457005b806110da6110d5600193888861249f565b6124af565b6110e86110d583868861249f565b838060a01b036111076110fa84611e10565b546001600160a01b031690565b169081158015611180575b61111b906124b9565b6111478161112885611e10565b80546001600160a01b0319166001600160a01b03909216919091179055565b848060a01b031691828203611160575b505050016110bb565b848060a01b03165f51602061466a5f395f51905f525f80a45f8080611157565b5060a085901b85900381168214611112565b34610356576020366003190112610356576004356111af81610366565b6111b761345e565b600f54906001600160a01b038083169082168181036111d257005b7f27b89aede8b560578baaa25ee5ce3852c5eecad1e114b941bbd89e1eb4bae6349360018060a01b03191617600f55610717604051928392836124f9565b346103565760203660031901126103565760043561122d81610366565b61123561345e565b6001600160a01b0381165f8181526016602052604090205460ff161561125757005b7f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db491610717915f52601660205260405f20600160ff1982541617905560405191829182610de3565b34610356575f366003190112610356576060600a5463ffffffff8064ffffffffff600b5460081c1660081c16604051925f84526020840152166040820152f35b34610356576020366003190112610356576004356112fc81610366565b6001600160a01b038181165f818152601460205260409020549091163303611372576113536113436113306110fa85611e10565b9361133e3361112883611e10565b611e29565b80546001600160a01b0319169055565b33916001600160a01b0316905f51602061466a5f395f51905f525f80a4005b60405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792070726f706f736564207061796565732063616e20616363657074006044820152606490fd5b346103565760e03660031901126103565736606411610356576064356001600160401b0381116103565736602382011215610356576004810135906001600160401b038211610356573660248383010111610356576084356001600160401b0381116103565761142b903690600401611026565b60a43593906001600160401b0385116103565761144f610588953690600401611026565b939092602460c435960161280b565b3461035657602036600319011261035657602061039e6004356114876105b06105aa3636610939565b6140c4565b3461035657602036600319011261035657602061039e6004356114b56105b06105aa3636610939565b6140e7565b34610356576040366003190112610356576004356114d781610366565b602435906114e86106775f5461035a565b331480156115ed575b6114fa906122e6565b61150261410a565b9061151161067760115461035a565b6040516370a0823160e01b815293602085806115303060048301610de3565b0381855afa9081156107ad5761156360209561156893611586985f916115c0575b5061155e82821015612a34565b612a77565b6141bd565b915f60405180968195829463a9059cbb60e01b845260048401612092565b03925af180156107ad57610588915f916115a1575b50612a84565b6115ba915060203d6020116107a65761079881836108bd565b5f61159b565b6115e09150883d8a116115e6575b6115d881836108bd565b810190612060565b5f611551565b503d6115ce565b506115fc61067760125461035a565b60206040518092630d629b5f60e31b8252818061161d3633600484016122af565b03915afa80156107ad576114fa915f9161163a575b5090506114f1565b611653915060203d6020116107a65761079881836108bd565b5f611632565b34610356575f366003190112610356576012546040516001600160a01b039091168152602090f35b34610356575f366003190112610356576011546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa9081156107ad5761044a916116e2915f916116f2575b506116dc61410a565b90612ac5565b6040519081529081906020820190565b61170b915060203d6020116115e6576115d881836108bd565b5f6116d3565b34610356575f36600319011261035657600f546040516001600160a01b039091168152602090f35b34610356575f36600319011261035657602060ff601554166040519015158152f35b6001600160401b0381116108825760051b60200190565b9080601f830112156103565781356117898161175b565b9261179760405194856108bd565b81845260208085019260051b82010192831161035657602001905b8282106117bf5750505090565b6020809183356117ce81610366565b8152019101906117b2565b6044359060ff8216820361035657565b608435906001600160401b038216820361035657565b346103565760c0366003190112610356576004356001600160401b0381116103565761182f903690600401611772565b6024356001600160401b0381116103565761184e903690600401611772565b906118576117d9565b6064356001600160401b038111610356576118769036906004016109a3565b61187e6117e9565b60a435949092906001600160401b038611610356576118a46105889636906004016109a3565b94612add565b346103565760203660031901126103565760206118d16004356118cc81610366565b61338d565b63ffffffff60405191168152f35b34610356575f3660031901126103565732330361199957600a54600b549061044a600883901c64ffffffffff169261192d610e6d611926600887901c63ffffffff16610eac565b9560ff1690565b63ffffffff61195861195161194b61194485613404565b5460170b90565b93613404565b5460e01c90565b169160405195869586939095949160809363ffffffff60ff9260a0880199885216602087015216604085015260170b606084015260018060401b0316910152565b60405162461bcd60e51b81526020600482015260146024820152734f6e6c792063616c6c61626c6520627920454f4160601b6044820152606490fd5b34610356575f366003190112610356576011546040516001600160a01b039091168152602090f35b3461035657604036600319011261035657600435611a1a81610366565b60243590611a27826105f5565b611a2f61345e565b611a37612428565b80516001600160a01b038084169492939291168414801590611b19575b611a5a57005b611ad67fb04e3a37abe9c0fcdfebdeae019a8e2b12ddf53f5d55ffb0caccc1bedaca154192611a99611a8a6108e0565b6001600160a01b039092168252565b63ffffffff8316602082015251600e80546001600160c01b0319166001600160a01b039092169190911760a084901b63ffffffff60a01b16179055565b611af16020611ae5855161035a565b94015163ffffffff1690565b6040805163ffffffff92831681529290911660208301526001600160a01b03939093169290a3005b5063ffffffff60208401511663ffffffff82161415611a54565b3461035657604036600319011261035657600435611b5081610366565b602435611b5c81610366565b6001600160a01b038281165f81815260136020526040902054909291163303611be9576001600160a01b038116928391611bb190611b9c33851415613418565b611128611bab6110fa85611e29565b93611e29565b6001600160a01b031603611bc157005b33907f84f7c7c80bb8ed2279b4aab5f61cd05e6374073d38f46d7f32de8c30e9e383675f80a4005b60405162461bcd60e51b815260206004820152601d60248201527f6f6e6c792063757272656e742070617965652063616e207570646174650000006044820152606490fd5b3461035657602036600319011261035657600435611c4b81610366565b611c5361345e565b6001600160a01b0316338114611cb057600180546001600160a01b031916821790555f546001600160a01b0390611c899061035a565b167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12785f80a3005b60405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103a3930b739b332b9103a379039b2b63360491b6044820152606490fd5b3461035657602036600319011261035657600435611d0c81610366565b611d1461345e565b601254906001600160a01b03808316908216818103611d2f57005b7f793cb73064f3c8cde7e187ae515511e6e56d1ee89bf08b82fa60fb70f8d489129360018060a01b03191617601255610717604051928392836124f9565b34610356575f36600319011261035657611d8d6105b06105aa3636610939565b63ffffffff80600b5460301c16805f52600c60205261044a60405f20916040611dfa611df0611de6835196611dc188610867565b54968760170b90818152898960c01c169889602083015260e01c958691015260170b90565b9563ffffffff1690565b9163ffffffff1690565b93856040519687961692169060170b8386610f68565b6001600160a01b03165f90815260136020526040902090565b6001600160a01b03165f90815260146020526040902090565b6001600160a01b03165f90815260026020526040902090565b6001600160a01b03165f90815260036020526040902090565b90604051611e8181610867565b915460ff80821615158452600882901c16602084015260101c6001600160601b03166040830152565b60301c63ffffffff1690565b634e487b7160e01b5f52603260045260245ffd5b90601f821015611ee557601c8260031c6006019260021b1690565b611eb6565b634e487b7160e01b5f52601160045260245ffd5b63ffffffff5f199116019063ffffffff8211611f1657565b611eea565b9063ffffffff8091169116039063ffffffff8211611f1657565b90633b9aca00820291808304633b9aca001490151715611f1657565b81810292918115918404141715611f1657565b91908201809211611f1657565b60018060a01b03165f52600260205260405f2060405190611f9182610867565b54611fca611fc660ff83161515808552604060ff8560081c1695866020820152019360018060601b039060101c168452151590565b1590565b61205a5761205461204861203a6120356103db9561202f610eac612022610eac600b549461201c61200c61200761200089611eaa565b9360ff1690565b611eca565b905463ffffffff9160031b1c1690565b90611f1b565b9260901c63ffffffff1690565b90611f51565b611f35565b92516001600160601b031690565b6001600160601b031690565b90611f64565b50505f90565b90816020910312610356575190565b6040513d5f823e3d90fd5b90816020910312610356575180151581036103565790565b6001600160a01b039091168152602081019190915260400190565b156120b457565b60405162461bcd60e51b815260206004820152601f60248201527f7472616e736665722072656d61696e696e672066756e6473206661696c6564006044820152606490fd5b9060018060a01b0361210c60115461035a565b6001600160a01b0384169391169190838314612271576040516370a0823160e01b8152602081806121403060048301610de3565b0381885afa80156107ad57612254575b50612159613657565b6040516370a0823160e01b8152602081806121773060048301610de3565b0381875afa80156107ad576121ac936020925f92612235575b5060405163a9059cbb60e01b8152948592839260048401612092565b03815f875af19182156107ad576121f0926121ce915f91612216575b506120ad565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b7f4966a50c93f855342ccf6c5c0d358b85b91335b2acedc7da0932f691f351711a5f80a3565b61222f915060203d6020116107a65761079881836108bd565b5f6121c8565b61224d919250833d85116115e6576115d881836108bd565b905f612190565b61226c9060203d6020116115e6576115d881836108bd565b612150565b50505050565b1561227e57565b60405162461bcd60e51b81526020600482015260096024820152684e6f2061636365737360b81b6044820152606490fd5b6001600160a01b0390911681526040602082018190528101829052606091805f848401375f828201840152601f01601f1916010190565b156122ed57565b606460405162461bcd60e51b815260206004820152602060248201527f4f6e6c79206f776e65722662696c6c696e6741646d696e2063616e2063616c6c6044820152fd5b60405190600554808352826020810160055f5260205f20925f5b8181106123605750506108ef925003836108bd565b84546001600160a01b031683526001948501948794506020909301920161234b565b6001600160a01b03165f8181526016602052604090205460ff16915081156123b6575b81156123af575090565b9050321490565b60155460ff161591506123a5565b156123cb57565b60405162461bcd60e51b815260206004820152601d60248201527f4f6e6c79206f776e6572267265717565737465722063616e2063616c6c0000006044820152606490fd5b63ffffffff60019116019063ffffffff8211611f1657565b6040519061243582610887565b600e546001600160a01b038116835260a01c63ffffffff166020830152565b1561245b57565b606460405162461bcd60e51b815260206004820152602060248201527f7472616e736d6974746572732e73697a6520213d207061796565732e73697a656044820152fd5b9190811015611ee55760051b0190565b356103db81610366565b156124c057565b60405162461bcd60e51b81526020600482015260116024820152701c185e595948185b1c9958591e481cd95d607a1b6044820152606490fd5b6001600160a01b0391821681529116602082015260400190565b6040519061010082016001600160401b03811183821017610882576040526108ef8260e06125b7600b5460ff8116845264ffffffffff8160081c16602085015261256c61255f82611eaa565b63ffffffff166040860152565b63ffffffff605082901c16606085015263ffffffff607082901c16608085015263ffffffff609082901c1660a085015263ffffffff60b082901c1660c085015260d01c62ffffff1690565b62ffffff16910152565b156125c857565b60405162461bcd60e51b815260206004820152600c60248201526b1cdd185b19481c995c1bdc9d60a21b6044820152606490fd5b1561260357565b60405162461bcd60e51b81526020600482015260186024820152773ab730baba3437b934bd32b2103a3930b739b6b4ba3a32b960411b6044820152606490fd5b1561264a57565b60405162461bcd60e51b81526020600482015260156024820152740c6dedcccd2ce88d2cecae6e840dad2e6dac2e8c6d605b1b6044820152606490fd5b60ff60019116019060ff8211611f1657565b60ff601b9116019060ff8211611f1657565b156126b257565b60405162461bcd60e51b815260206004820152601a60248201527977726f6e67206e756d626572206f66207369676e61747572657360301b6044820152606490fd5b156126fb57565b60405162461bcd60e51b815260206004820152601e60248201527f7369676e617475726573206f7574206f6620726567697374726174696f6e00006044820152606490fd5b90815260808101929160609160200137565b6040519061275f82610887565b5f6020838281520152565b9060405161277781610887565b602060ff8294548181161515845260081c16910152565b1561279557565b60405162461bcd60e51b815260206004820152600f60248201526e39b4b3b730ba3ab9329032b93937b960891b6044820152606490fd5b156127d357565b60405162461bcd60e51b815260206004820152601060248201526f323ab83634b1b0ba329039b4b3b732b960811b6044820152606490fd5b90829796929394955a9661281d612513565b9664ffffffffff602435169561284f61283e60208b015164ffffffffff1690565b64ffffffffff808a169116106125c1565b61286a61286561285e33611e42565b5460ff1690565b6125fc565b612889848484600a549b612882600435809e14612643565b898b6139f5565b6128af6128a86128a261289d8c5160ff1690565b612687565b60ff1690565b83146126ab565b6128ba8483146126f4565b6128c536868861096d565b602081519101206040516128f1816128e36004602083019586612740565b03601f1981018352826108bd565b5190209b5f9c6128ff612752565b505f955b84871061296757505050505050506129599392916129529161294b8a7e010101010101010101010101010101010101010101010101010101010101016108ef9b9c16146127cc565b369161096d565b9184613d5e565b63ffffffff33931691613fd0565b9091929394959d60208f1015611ee55760208f88866129cb6129a3848861299c828f8f612996905f9b1a612699565b9761249f565b359561249f565b356040519384938a859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156107ad57600190612a26612a1c612a1360206129f96129f45f51611e5b565b61276a565b612a0b612a068251151590565b61278e565b015160ff1690565b60031b60ff1690565b60ff600191161b90565b019e01959493929190612903565b15612a3b57565b60405162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b6044820152606490fd5b91908203918211611f1657565b15612a8b57565b60405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606490fd5b81810392915f138015828513169184121617611f1657565b949591909392612aeb61345e565b612af9601f87511115612ed0565b612b068651865114612f0f565b612b1e612b1283612f54565b60ff8851911610612f68565b612b2a60ff83166141cd565b612baf815160208301206040516020810190612ba6816128e37f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000869091603192600160f81b835260401b600183015260401b60198201520190565b51902014612faf565b612bb76108f1565b95865260208601948552612bd26040870192839060ff169052565b606086019081526001600160401b03909316608086019081529260a08601968752612c0765ffffffffff0019600b5416600b55565b612c0f613657565b6004545f5b818110612e85575050612c25613070565b612c2d6130ad565b5f5b86518051821015612d065790612d0081612cca612cc5611fc661285e612cc0612c748f8f612cb58992612c8b612c8660019f61285e612c81612c7489611fc6946130ea565b516001600160a01b031690565b611e5b565b6130fe565b612cbb612c81612c7460ff87169d8e94612cb5612ca66108e0565b600181529660ff166020880152565b516130ea565b61315a565b611e42565b613184565b612ce4612cd5610900565b600181529160ff166020830152565b5f6040820152612cfb612cc0612c74858c516130ea565b6131f6565b01612c2f565b50509195937f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0594612e489294612d3c8851613237565b612d46835161328b565b612d64612d54875160ff1690565b60ff1660ff19600b541617600b55565b600d5460201c63ffffffff16600d805463ffffffff60201b19164360201b63ffffffff60201b1617905594612dbf612da9612da4600d5463ffffffff1690565b612410565b63ffffffff1663ffffffff19600d541617600d55565b612e03612dfe612dd4600d5463ffffffff1690565b8b5187518b5160ff16865188519092906001600160401b03169363ffffffff8b519616304661420e565b600a55565b600a5496612e16600d5463ffffffff1690565b94612e39612e298c519251935160ff1690565b935194516001600160401b031690565b945195604051998a998a6132df565b0390a1612e56600b54611eaa565b915f5b825151811015612e7f5780612e7985612e73600194611eca565b90613375565b01612e59565b50915050565b805f612ec9612ead612e98600195612ff3565b905460039190911b1c6001600160a01b031690565b82612ec3612ebd612e988761300b565b92611e5b565b55611e42565b5501612c14565b15612ed757565b60405162461bcd60e51b815260206004820152601060248201526f746f6f206d616e79206f7261636c657360801b6044820152606490fd5b15612f1657565b60405162461bcd60e51b81526020600482015260166024820152750dee4c2c6d8ca40d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606490fd5b60ff166003029060ff8216918203611f1657565b15612f6f57565b60405162461bcd60e51b81526020600482015260186024820152770ccc2ead8e8f25adee4c2c6d8ca40cc40e8dede40d0d2ced60431b6044820152606490fd5b15612fb657565b60405162461bcd60e51b8152602060048201526015602482015274696e76616c6964206f6e636861696e436f6e66696760581b6044820152606490fd5b600454811015611ee55760045f5260205f2001905f90565b600554811015611ee55760055f5260205f2001905f90565b5f5b82811061303157505050565b5f82820155600101613025565b90600160401b81116108825781549080835581811061305c57505050565b6108ef925f528060205f2001910390613023565b6004545f6004558061307f5750565b60045f526108ef907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b613023565b6005545f600555806130bc5750565b60055f526108ef907f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0613023565b8051821015611ee55760209160051b010190565b1561310557565b60405162461bcd60e51b81526020600482015260176024820152767265706561746564207369676e6572206164647265737360481b6044820152606490fd5b9061ff0082549160081b169061ff001916179055565b60ff60206108ef9361317b81511515859060ff801983541691151516179055565b01511690613144565b1561318b57565b60405162461bcd60e51b815260206004820152601c60248201527b7265706561746564207472616e736d6974746572206164647265737360201b6044820152606490fd5b805462010000600160701b03191660109290921b62010000600160701b0316919091179055565b6108ef9161321381511515839060ff801983541691151516179055565b61322460ff60208301511683613144565b604001516001600160601b0316906131cf565b8051906001600160401b0382116108825760209061325683600461303e565b0160045f5260205f205f5b83811061326e5750505050565b82516001600160a01b031681830155602090920191600101613261565b8051906001600160401b038211610882576020906132aa83600561303e565b0160055f5260205f205f5b8381106132c25750505050565b82516001600160a01b0316818301556020909201916001016132b5565b95939461331d61333f9663ffffffff6103db9c9a9660ff968261332b97168c5260208c01521660408a015261012060608a01526101208901906107b2565b9087820360808901526107b2565b921660a085015283820360c08501526103a6565b6001600160401b0390931660e0820152808303610100909101526103a6565b9063ffffffff809160031b9316831b921b19161790565b919063ffffffff613389921690835461335e565b9055565b60018060a01b03165f52600260205260405f206133e3611fc6604051926133b384610867565b549260ff8416151590818152604060ff8660081c169586602084015260018060601b039060101c16910152151590565b6133ff576103db9061201c61200c612007612000600b54611eaa565b505f90565b63ffffffff165f52600c60205260405f2090565b1561341f57565b60405162461bcd60e51b815260206004820152601760248201527631b0b73737ba103a3930b739b332b9103a379039b2b63360491b6044820152606490fd5b5f546001600160a01b0316330361347157565b60405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606490fd5b604051906006825f5b601f600782011061351c5750905463ffffffff8082168352602082811c821690840152604082811c821690840152606082811c821690840152608082811c82169084015260a082811c82169084015260c091821c169101526108ef6103e0836108bd565b9060016101006008926135a4865461353f8363ffffffff831663ffffffff169052565b602081811c63ffffffff1690840152604081811c63ffffffff1690840152606081811c63ffffffff1690840152608081811c63ffffffff169084015260a081811c63ffffffff169084015260c081811c63ffffffff169084015260e090811c90830152565b01930191019190916134b8565b90601f811015611ee55760051b0190565b5f5b6003811061360c57505f905f5b600781106135e0575050600955565b909160206136036001926135f8865163ffffffff1690565b908560021b9061335e565b930191016135d1565b91905f925f5b6008811061362b575060019192938160060155016135c4565b9193602061364e600192613643885163ffffffff1690565b908660021b9061335e565b95019201613612565b61366260115461035a565b9061366e600b54611eaa565b916136776134af565b90613680612331565b905f5b8251811015613808576136b26120486136a2612cc0612c7485886130ea565b5460101c6001600160601b031690565b6136d76136c5612cc0612c7485886130ea565b805462010000600160701b0319169055565b633b9aca00613704610eac6136f96136ef868a6135b1565b5163ffffffff1690565b8a0363ffffffff1690565b600b546137199060901c63ffffffff16610eac565b020201908161372d575b6001915001613683565b6137456110fa613740612c7484886130ea565b611e10565b60405163a9059cbb60e01b8152926001600160a01b0385169160208580613770858560048401612092565b03815f875af19485156107ad57600195613790915f916137f05750612a84565b6137a98a61379e868b6135b1565b9063ffffffff169052565b5f51602061468a5f395f51905f526137e8868060a01b036137cd612c74888c6130ea565b1692604051918291898060a01b031695829190602083019252565b0390a4613723565b6115ba915060203d81116107a65761079881836108bd565b5050506108ef9192506135c2565b61382761382282611e42565b611e74565b90613835611fc68351151590565b6139135761384281611f71565b8061384c57505050565b6138586110fa83611e10565b9261386761067760115461035a565b906020604051809363a9059cbb60e01b8252815f8161388a898c60048401612092565b03925af19182156107ad576138c5926138a9915f916115a15750612a84565b612e7361200760206138bc600b54611eaa565b93015160ff1690565b6138d16136c583611e42565b5f51602061468a5f395f51905f5261390e6138ed60115461035a565b6040519384526001600160a01b039081169581169416929081906020820190565b0390a4565b5050565b9063ffffffff6001600160501b038316116139a15760409063ffffffff83165f52600c602052815f209261398d61398384519561395387610867565b54958660170b9081815263ffffffff8860c01c169788602083015260e01c968791015260170b9563ffffffff1690565b9363ffffffff1690565b9163ffffffff80839660170b951693169190565b5f91508190819081908190565b156139b557565b60405162461bcd60e51b81526020600482015260186024820152770c6c2d8d8c8c2e8c240d8cadccee8d040dad2e6dac2e8c6d60431b6044820152606490fd5b50939250508261014401928361014411611f16578160051b9180830460201490151715611f165701906101448201809311611f16578060051b9080820460201490151715611f1657610144910101809111611f16576108ef9036146139ae565b15613a5c57565b60405162461bcd60e51b815260206004820152601e60248201527f6e756d206f62736572766174696f6e73206f7574206f6620626f756e647300006044820152606490fd5b15613aa857565b60405162461bcd60e51b815260206004820152601e60248201527f746f6f206665772076616c75657320746f207472757374206d656469616e00006044820152606490fd5b15613af457565b60405162461bcd60e51b815260206004820152601e60248201527f6d656469616e206973206f7574206f66206d696e2d6d61782072616e676500006044820152606490fd5b63ffffffff1663ffffffff8114611f165760010190565b613c9860e06108ef92613b7260ff825116600b9060ff1660ff19825416179055565b613ba164ffffffffff602083015116600b9065ffffffffff0082549160081b169065ffffffffff001916179055565b6040810151600b8054606084015160309390931b63ffffffff60301b16600160301b600160701b03199091161760509290921b63ffffffff60501b16919091179055613c1c613bf7608083015163ffffffff1690565b600b805463ffffffff60701b191660709290921b63ffffffff60701b16919091179055565b613c55613c3060a083015163ffffffff1690565b600b805463ffffffff60901b191660909290921b63ffffffff60901b16919091179055565b613c8e613c6960c083015163ffffffff1690565b600b805463ffffffff60b01b191660b09290921b63ffffffff60b01b16919091179055565b015162ffffff1690565b600b805462ffffff60d01b191660d09290921b62ffffff60d01b16919091179055565b95989796949263ffffffff919261010088019360170b885260018060a01b0316602088015216604086015261010060608601528251809152602061012086019301905f5b818110613d455750505091613d33613d268360e095876108ef9998960360808701526103a6565b9760a084019060170b9052565b60c0820152019064ffffffffff169052565b825160170b855260209485019490920191600101613cff565b9092613d69906142ed565b60408101613d7c601f8251511115613a55565b613d97613d8a845160ff1690565b60ff835151911610613aa1565b64ffffffffff84166020840152613dc4613dbd8251613db7815160011c90565b906130ea565b5160170b90565b938460170b94857f000000000000000000000000000000000000000000000000000000000000000060170b131580613fa3575b613e0090613aed565b60408501948551613e149063ffffffff1690565b613e1d90613b39565b63ffffffff168652845163ffffffff16613e35610900565b601784900b81529063ffffffff1660208201524263ffffffff166040820152865163ffffffff16613e6590613404565b8151602083015160409093015160c09390931b63ffffffff60c01b166001600160c01b039091161760e09290921b6001600160e01b031916919091179055613eac90613b50565b845163ffffffff16908451613ec49063ffffffff1690565b93519260208601519860608701998a51613ede9060170b90565b906040519663ffffffff8897169833613ef79789613cbb565b037fc797025feeeaf2cd924c99e9205acb8ec04d5cad21c41ce637a38fb6dee6016a91a28151905160405163ffffffff91821681525f9291909116907f0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac6027190602090a3805160405142815263ffffffff9091169083907f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f90602090a35163ffffffff1690613dbd91614465565b507f000000000000000000000000000000000000000000000000000000000000000060170b861315613df7565b915f8260170b12612271576140a3916140649161404b9061401d633b9aca003a04608088015163ffffffff169063ffffffff8061401460608c015163ffffffff1690565b16921690614532565b5a9161403a61403260e08a015162ffffff1690565b62ffffff1690565b9163ffffffff3660041b9216614557565b670de0b6b3a76400006001600160c01b03909216020490565b633b9aca00614092610eac60c06001600160601b036140856136a28a611e42565b1696015163ffffffff1690565b02908301016001600160601b031690565b906001600160601b03821610613913576140bf6108ef92611e42565b6131cf565b63ffffffff81116133ff5763ffffffff165f52600c60205260405f205460170b90565b63ffffffff81116133ff5763ffffffff165f52600c60205260405f205460e01c90565b5f90614114612331565b805192600b5463ffffffff8160301c1661412c6134af565b5f915b87831061418c575050509061202f612035610eac6141549463ffffffff9060901c1690565b925f915b81831061416457505050565b9091936141836001916120546120486136a2612cc0612c748b896130ea565b94019190614158565b9091936141b1600191612054610eac6141ab6136ef8a899e9c9e6135b1565b86611f1b565b9401919096949661412f565b8181106141c8575090565b905090565b156141d457565b60405162461bcd60e51b815260206004820152601260248201527166206d75737420626520706f73697469766560701b6044820152606490fd5b60408051602081019283526001600160a01b03909316908301526001600160401b039092166060820152610120608082015290969095869591949093919290919061425e906101408801906107b2565b868103601f190160a0880152614273916107b2565b9060ff1660c0860152601f198582030160e0860152614291916103a6565b6001600160401b03909116610100840152828103601f19016101208401526142b8916103a6565b03601f19810182526142ca90826108bd565b5190206001600160f01b0316600160f01b1790565b51908160170b820361035657565b905f60606040516142fd816108a2565b828152816020820152816040820152015281518201916080816020850194031261035657602081015190614330826105f5565b604081015160608201516001600160401b0381116103565782019085603f83011215610356576020820151956143658761175b565b9261437360405194856108bd565b8784526020808086019960051b8301010191821161035657604001965b81881061440e5750506103db939495506143d3906143ba836143b4608087016142df565b956145b5565b6143e18351916040519384916020830160209181520190565b03601f1981018452836108bd565b81526143fa6143ee61090f565b63ffffffff9096168652565b6020850152604084015260170b6060830152565b6020809161441b8a6142df565b815201970196614390565b1561442d57565b60405162461bcd60e51b815260206004820152601060248201526f696e73756666696369656e742067617360801b6044820152606490fd5b61446d612428565b80516001600160a01b039061448390821661035a565b161561452d576108ef9263ffffffff8092614522856145146144a761452898611efe565b956144bd6144b761194489613404565b60170b90565b966144dc6106776144d5602089015163ffffffff1690565b975161035a565b97876040519a8b9663beed9b5160e01b6020890152169216602486019094939260609260808301968352602083015260408201520152565b03601f1981018652856108bd565b1661461c565b614426565b505050565b6103db92918190808210614548575b50506141bd565b8192500360011c015f80614541565b939291909280851061457157633b9aca0094030101020290565b606460405162461bcd60e51b815260206004820152602060248201527f6c6566744761732063616e6e6f742065786365656420696e697469616c4761736044820152fd5b90516001600160fb1b0381168103611f165760051b60a001908160a011611f165751036145de57565b60405162461bcd60e51b81526020600482015260166024820152750e4cae0dee4e840d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606490fd5b5f9392915a6113888110156146315750505050565b6113871980820160061c90910301821061464c575b80612271565b5f809495508392916020829551940192f1506001905f808061464656fe78af32efdcad432315431e9b03d27e6cd98fb79c405fdc5af7c1714d9c0f75b3d0b1dac935d85bd54cf0a33b0d41d39f8cf53a968465fc7ea2377526b8ac712c0bf184bf1bba9699114bdceddaf338a1b364252c5e497cc01918dde92031713f