60808060405234620000f5576020816200001b600c93620000fa565b828152016b26b0b3b4b1b9bbb0b8102b1960a11b815220600160206040516200004481620000fa565b82815201603160f81b815220906040519160208301917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8352604084015260608301524660808301523060a083015260a0825260c082019180831060018060401b03841117620000df57604083905251902060035560016203000955600680546001600160a01b03191633179055612ac19081620001178239f35b634e487b7160e01b600052604160045260246000fd5b600080fd5b604081019081106001600160401b03821117620000df5760405256fe6080604052600436101561001257600080fd5b60003560e01c8063022c0d9f146114a7578063053f14da1461148957806306fdde03146114445780630902f1ac146113eb578063095ea7b3146113c55780630dfe16811461139c57806318160ddd1461137e57806323b872dd146112d7578063252c09d7146112855780632b8e06661461126057806330adf81f14611225578063313ce5671461120957806332148f67146111625780633644e51514611144578063485cc95514610ff35780634f1a470814610fd55780636a62784214610c7957806370a0823114610c3f5780637ecebe0014610c05578063883bdbfd14610a9d57806389afcb441461077b57806395d89b4114610736578063a9059cbb14610705578063aab5497c146106e1578063ba9a7a56146106c4578063bc25cf7714610588578063c45a01551461055f578063d21220a714610536578063d505accf1461033f578063d6cf0c371461031d578063dd62ed3e146102cc578063e1f1c4a7146102af5763fff6cae91461018757600080fd5b3461026857600036600319011261026857620300096101a96001825414611ed2565b600081556007546040516370a0823160e01b808252306004830152909291602091906001600160a01b039083908690602490829085165afa94851561027457600095610280575b508290600854169160246040518094819382523060048301525afa9182156102745760009261023f575b60018461023c8588600954916001600160701b03808460701c16931691611f51565b55005b90809250813d831161026d575b6102568183611d97565b8101031261026857518261023c61021a565b600080fd5b503d61024c565b6040513d6000823e3d90fd5b9094508281813d83116102a8575b6102988183611d97565b81010312610268575193826101f0565b503d61028e565b346102685760003660031901126102685760206040516127108152f35b34610268576040366003190112610268576102e5611d17565b6102ed611d2d565b9060018060a01b038091166000526002602052604060002091166000526020526020604060002054604051908152f35b3461026857600036600319011261026857602061ffff600b5416604051908152f35b346102685760e036600319011261026857610358611d17565b610360611d2d565b604435906064356084359060ff8216809203610268574281106104fa576003546001600160a01b03868116600081815260046020526040902080549195929492906103aa83611ec3565b90556040519260208401927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98452876040860152868916606086015289608086015260a085015260c084015260c0835260e083019383851067ffffffffffffffff8611176104e45784600094610122608095602098604052825190209161010081019461190160f01b865261010282015201526042815261044a81611d7b565b519020906040519182528482015260a435604082015260c435606082015282805260015afa1561027457600051169081151591826104da575b5050156104955761049392611e02565b005b60405162461bcd60e51b815260206004820152601e60248201527f4d616769637377617056323a20494e56414c49445f5349474e415455524500006044820152606490fd5b1490508480610483565b634e487b7160e01b600052604160045260246000fd5b60405162461bcd60e51b8152602060048201526014602482015273135859da58dcddd85c158c8e881156141254915160621b6044820152606490fd5b34610268576000366003190112610268576008546040516001600160a01b039091168152602090f35b34610268576000366003190112610268576006546040516001600160a01b039091168152602090f35b3461026857602080600319360112610268576105a2611d17565b9062030009906105b56001835414611ed2565b600082556007546008546040516370a0823160e01b8082523060048301526001600160a01b03928316949391929091168383602481845afa92831561027457600093610693575b5061061f90876106196001600160701b0395866009541690612987565b916120fa565b6040519081523060048201528281602481875afa9283156102745760009361065c575b60018661023c878a610619898960095460701c1690612987565b90809692949350813d831161068c575b6106768183611d97565b8101031261026857935190916106196001610642565b503d61066c565b9092508381813d83116106bd575b6106ab8183611d97565b8101031261026857519161061f6105fc565b503d6106a1565b346102685760003660031901126102685760206040516103e88152f35b34610268576000366003190112610268576020600b5461ffff60405191831c168152f35b346102685760403660031901126102685761072b610721611d17565b6024359033611e59565b602060405160018152f35b346102685760003660031901126102685761077760405161075681611d5f565b600881526726a0a3a4a196ab1960c11b602082015260405191829182611db9565b0390f35b346102685760208060031936011261026857610795611d17565b62030009916107a76001845414611ed2565b600083556107ca6009546001600160701b0391828216928260701c169160e01c90565b5091909360018060a01b0393846007541694806008541694604051956370a0823160e01b80885230600489015286886024818c5afa97881561027457600098610a6e575b5060405198818a523060048b0152878a602481865afa998a156102745760009a610a3f575b5030600052600188526108676040600020549961085b6108608c61085b600054948592612a34565b611f14565b9c8c612a34565b988a151580610a36575b156109de5760249160008a9230825260018452610892816040842054612987565b3083526001855260408320556108a9818354612987565b8255604051908152600080516020612a6c833981519152843092a36108cf8c89836120fa565b6108da8b89876120fa565b604051928380928682523060048301525afa9182156102745788916000936109ad575b5060246040518095819382523060048301525afa91821561027457600092610971575b509160409961093492600197969594611f51565b875191878352868684015216907fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496883392a3558351928352820152f35b9150949392918682813d83116109a6575b61098c8183611d97565b810103126102685790519394929391929091906040610920565b503d610982565b8281939294503d83116109d7575b6109c58183611d97565b8101031261026857879051918c6108fd565b503d6109bb565b60405162461bcd60e51b8152600481018a9052602a60248201527f4d616769637377617056323a20494e53554646494349454e545f4c495155494460448201526912551657d0955493915160b21b6064820152608490fd5b50891515610871565b9099508781813d8311610a67575b610a578183611d97565b810103126102685751988b610833565b503d610a4d565b9097508681813d8311610a96575b610a868183611d97565b810103126102685751968a61080e565b503d610a7c565b3461026857602080600319360112610268576004359067ffffffffffffffff80831161026857366023840112156102685782600401359081116102685760248160051b8401013681116102685763ffffffff804216600a5491600b549361ffff8086169560101c1697610b0f87612283565b96610b1d6040519889611d97565b87526024018787015b828210610bed57505050610b3b871515612492565b845194610b60610b4a87612283565b96610b586040519889611d97565b808852612283565b8688019790601f190136893760005b8251811015610baa5780610b958b898988610b8d610ba5978a61254f565b51168a612563565b610b9f828b61254f565b52611ec3565b610b6f565b508688604051928392818401908285525180915260408401929160005b828110610bd657505050500390f35b835185528695509381019392810192600101610bc7565b81358481168103610268578152908801908801610b26565b34610268576020366003190112610268576001600160a01b03610c26611d17565b1660005260046020526020604060002054604051908152f35b34610268576020366003190112610268576001600160a01b03610c60611d17565b1660005260016020526020604060002054604051908152f35b3461026857602036600319011261026857610c92611d17565b62030009610ca36001825414611ed2565b60008155610cc66009546001600160701b0391828216928260701c169160e01c90565b509160018060a01b036007541693604051926020846024816370a0823160e01b998a82523060048301525afa93841561027457600094610fa1575b50600854604051968752306004880152602090879060249082906001600160a01b03165afa95861561027457600096610f6d575b506001600160701b039182821695610d4d8787612987565b93811692610d5b848a612987565b93600054988915600014610f37575050610d758486612a34565b60006003821115610f295750808060011c60018101809111610ef457905b828210610f0a5750505b6103e7198101908111610ef457610db49098612920565b600055600080526001602052610dce604060002054612920565b600080526001602052604060002055600080600080516020612a6c83398151915260206040516103e88152a35b8715610e9c57602098600197610e6394610e178b600054612972565b600055898060a01b031680600052898c52610e378b604060002054612972565b816000528a8d526040600020556000600080516020612a6c8339815191528d8d604051908152a3611f51565b604051918252858201527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f60403392a255604051908152f35b60405162461bcd60e51b815260206004820152602a60248201527f4d616769637377617056323a20494e53554646494349454e545f4c495155494460448201526912551657d3525395115160b21b6064820152608490fd5b634e487b7160e01b600052601160045260246000fd5b909150610f2082610f1b8184611f14565b61242b565b60011c90610d93565b9015610d9d57506001610d9d565b9061085b610f4f610f569361085b8d8b9e979e612a34565b9387612a34565b80821015610f6657505b96610dfb565b9050610f60565b9095506020813d602011610f99575b81610f8960209383611d97565b8101031261026857519486610d35565b3d9150610f7c565b9093506020813d602011610fcd575b81610fbd60209383611d97565b8101031261026857519286610d01565b3d9150610fb0565b34610268576000366003190112610268576020600554604051908152f35b346102685760403660031901126102685761100c611d17565b611014611d2d565b6006549091906001600160a01b039081163303611106576004928160209316916bffffffffffffffffffffffff60a01b9183836007541617600755169060085416176008556040519283809263313ce56760e01b82525afa8015610274576000906110ca575b60ff1660055561108b604051611d43565b600c805463ffffffff19164263ffffffff161790556000600d55600e805460ff19166001179055600b805465ffffffffffff1916640100010000179055005b506020813d82116110fe575b816110e360209383611d97565b81010312610268575160ff811681036102685760ff9061107a565b3d91506110d6565b60405162461bcd60e51b815260206004820152601660248201527526b0b3b4b1b9bbb0b82b191d102327a92124a22222a760511b6044820152606490fd5b34610268576000366003190112610268576020600354604051908152f35b346102685760203660031901126102685760043561ffff808216820361026857600191620300099161119684845414611ed2565b600083556111ac81600b5460201c1692836124c2565b600b805465ffff000000001916602083901b65ffff0000000016179055168082036111d657505055005b7fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a9160409182519182526020820152a155005b3461026857600036600319011261026857602060405160128152f35b346102685760003660031901126102685760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b3461026857600036600319011261026857602061ffff600b5460101c16604051908152f35b346102685760203660031901126102685760043561ffff8110156102685760036060910263ffffffff81600c0154169060ff600e600d8301549201541690604051928352602083015215156040820152f35b34610268576060366003190112610268576112f0611d17565b6113346112fb611d2d565b6044359060018060a01b03841693846000526020946002865260406000203360005286526000196040600020540361133d575b50611e59565b60405160018152f35b8060005260028652604060002033600052865261135f84604060002054612987565b906000526002865260406000203360005286526040600020558561132e565b34610268576000366003190112610268576020600054604051908152f35b34610268576000366003190112610268576007546040516001600160a01b039091168152602090f35b346102685760403660031901126102685761072b6113e1611d17565b6024359033611e02565b3461026857600036600319011261026857606063ffffffff6114226009546001600160701b0391828216928260701c169160e01c90565b909291604051936001600160701b038092168552166020840152166040820152f35b346102685760003660031901126102685761077760405161146481611d5f565b600c81526b26b0b3b4b1b9bbb0b8102b1960a11b602082015260405191829182611db9565b34610268576000366003190112610268576020600a54604051908152f35b34610268576080366003190112610268576044356001600160a01b03811690036102685760643567ffffffffffffffff80821161026857366023830112156102685781600401359081116102685736910160240111610268576115106001620300095414611ed2565b600062030009556004351580158091611d0c575b15611cb7576115486009546001600160701b0391828216928260701c169160e01c90565b506001600160701b0382166004351080611ca3575b15611c52576007546008546001600160a01b03908116949181169291906044351683141580611c3d575b15611bf857602492602091611be4575b8335611bd1575b6040516370a0823160e01b815230600482015293849182905afa91821561027457600092611b9a575b506020602494604051958680926370a0823160e01b82523060048301525afa93841561027457600094611b66575b5061160b6004356001600160701b038516612262565b821115611b5e5761163061162a6004356001600160701b038616612262565b83612262565b935b6116476024356001600160701b038416612262565b811115611b575761166c6116666024356001600160701b038516612262565b82612262565b8515801590611b4e575b15611afa57600654604051631184650760e31b81523060048201526001600160a01b0390911694602082602481895afa91821561027457600092611ac4575b50906116d66116e26116dc6116cc6116e9956129d9565b6116d6858d612a34565b90612987565b956129d9565b9184612a34565b956116f48784612a34565b6117106001600160701b0386166001600160701b038916612a34565b60019061271060025b60018111611a9b575080600019048311610ef457611738920290612a34565b11611a655760a060249560405196878092634ec1b53760e11b82523060048301525afa91821561027457600094600094600097600095611a06575b506007546008546001600160a01b039081169a9116929060005b60ff811660028110156118315715801561182a5785905b15611821578a8a8a8a5b806117cd575b505050505060ff8080831614610ef4571660010161178d565b61271093846117df6117ed9584611f3e565b0480611810575b5050611f3e565b048c816117ff575b508a8a8d926117b4565b611808926120fa565b8d808c6117f5565b61181a91876120fa565b8e386117e6565b8a8a8a896117ae565b8c906117a4565b505090918b908b6020602496604051978880926370a0823160e01b82523060048301525afa958615610274576000966119cb575b5090602060249392604051948580926370a0823160e01b82523060048301525afa92831561027457600093611995575b5061271090048510611950576127109004811061190b576118b593611f51565b60405191825260208201526004356040820152602435606082015260018060a01b0360443516907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82260803392a360016203000955005b60405162461bcd60e51b815260206004820152601d60248201527f4d616769637377617056323a2062616c616e63653141646a75737465640000006044820152606490fd5b60405162461bcd60e51b815260206004820152601d60248201527f4d616769637377617056323a2062616c616e63653041646a75737465640000006044820152606490fd5b9092506020813d6020116119c3575b816119b160209383611d97565b81010312610268575191612710611895565b3d91506119a4565b92919095506020833d6020116119fe575b816119e960209383611d97565b81010312610268579151949091906020611865565b3d91506119dc565b955093509450945060a0833d8211611a5d575b81611a2660a09383611d97565b8101031261026857611a3a6020840161226f565b946040840151946080611a4f6060870161226f565b95015196959496938a611773565b3d9150611a19565b60405162461bcd60e51b815260206004820152600e60248201526d4d616769637377617056323a204b60901b6044820152606490fd5b9080600019048111610ef45760018216611abb575b80029060011c611719565b80930292611ab0565b91506020823d602011611af2575b81611adf60209383611d97565b81010312610268579051906116d66116b5565b3d9150611ad2565b60405162461bcd60e51b815260206004820152602660248201527f4d616769637377617056323a20494e53554646494349454e545f494e5055545f604482015265105353d5539560d21b6064820152608490fd5b50801515611676565b600061166c565b600093611632565b9093506020813d602011611b92575b81611b8260209383611d97565b81010312610268575192846115f5565b3d9150611b75565b9391506020843d602011611bc9575b81611bb660209383611d97565b81010312610268579251909260206115c7565b3d9150611ba9565b611bdf8435604435886120fa565b61159e565b611bf3600435604435836120fa565b611597565b60405162461bcd60e51b815260206004820152601760248201527f4d616769637377617056323a20494e56414c49445f544f0000000000000000006044820152606490fd5b506044356001600160a01b0316851415611587565b60405162461bcd60e51b815260206004820152602360248201527f4d616769637377617056323a20494e53554646494349454e545f4c495155494460448201526249545960e81b6064820152608490fd5b506001600160701b0381166024351061155d565b60405162461bcd60e51b815260206004820152602760248201527f4d616769637377617056323a20494e53554646494349454e545f4f555450555460448201526617d05353d5539560ca1b6064820152608490fd5b506024351515611524565b600435906001600160a01b038216820361026857565b602435906001600160a01b038216820361026857565b6060810190811067ffffffffffffffff8211176104e457604052565b6040810190811067ffffffffffffffff8211176104e457604052565b6080810190811067ffffffffffffffff8211176104e457604052565b90601f8019910116810190811067ffffffffffffffff8211176104e457604052565b6020808252825181830181905290939260005b828110611dee57505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501611dcc565b909160207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259160018060a01b03809416938460005260028352604060002095169485600052825280604060002055604051908152a3565b90916020600080516020612a6c8339815191529160018060a01b038094169360009585875260018452611e90836040892054612987565b86885260018552604088205516948581526040611eb08382842054612972565b91878152600185522055604051908152a3565b6000198114610ef45760010190565b15611ed957565b60405162461bcd60e51b8152602060048201526013602482015272135859da58dcddd85c158c8e881313d0d2d151606a1b6044820152606490fd5b8115611f1e570490565b634e487b7160e01b600052601260045260246000fd5b8115611f1e570690565b81810292918115918404141715610ef457565b90926001600160701b039283831115806120f0575b156120b35763ffffffff918242169260095460e01c8403161515806120a8575b8061209d575b611ffd575b505050607092831b6dffffffffffffffffffffffffffff60701b169082169081174260e01b6001600160e01b03191617600981905560408051928352931c90911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad19190a1565b909391949260055494604d8611610ef4577f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad19661207961205863ffff0000938761205060409b82809a1690600a0a611f3e565b911690611f14565b9182600a55600b5461ffff93848260201c169285808460101c1693166122f4565b929091600b5492169260101b169063ffffffff19161717600b559294819450611f91565b508481161515611f8c565b508482161515611f86565b60405162461bcd60e51b81526020600482015260156024820152744d616769637377617056323a204f564552464c4f5760581b6044820152606490fd5b5083851115611f66565b906040519261210884611d5f565b601984527f7472616e7366657228616464726573732c75696e74323536290000000000000060209485015260405163a9059cbb60e01b8186019081526001600160a01b03909316602482015260448082019290925290815261216981611d7b565b600092839283809351925af1903d1561225b573d67ffffffffffffffff811161224757604051906121a3601f8201601f1916860183611d97565b81523d828583013e5b82612200575b5050156121bc5750565b6064906040519062461bcd60e51b82526004820152601c60248201527f4d616769637377617056323a205452414e534645525f4641494c4544000000006044820152fd5b805192508215919084831561221c575b505050905038806121b2565b91938180945001031261224357820151908115158203612240575080388084612210565b80fd5b5080fd5b634e487b7160e01b82526041600452602482fd5b60606121ac565b91908203918211610ef457565b51906001600160a01b038216820361026857565b67ffffffffffffffff81116104e45760051b60200190565b906040516122a881611d43565b604060ff6002839563ffffffff8154168552600181015460208601520154161515910152565b90600161ffff80931601918211610ef457565b9061ffff809116918215611f1e57160690565b9492909161ffff92838710156123a45761231360038802600c0161229b565b9663ffffffff9384895116858416146123eb5785811680878a161190816123c4575b50916123559861235a926123609695946000146123ba57509889916122ce565b6122e1565b97612438565b918510156123a457600e604091600387029081600c019085511663ffffffff198254161790556020840151600d82015501910151151560ff80198354169116179055565b634e487b7160e01b600052603260045260246000fd5b90509889916122ce565b905060009493929194190190868211610ef457929391929190861686831614612355612335565b909750955050505050565b6040519061240382611d43565b60006040838281528260208201520152565b63ffffffff9182169082160391908211610ef457565b91908201809211610ef457565b612472909291926124476123f6565b5061246c63ffffffff938460206124618286511689612415565b940151931690611f3e565b9061242b565b906040519261248084611d43565b16825260208201526001604082015290565b1561249957565b60405162461bcd60e51b81526020600482015260016024820152604960f81b6044820152606490fd5b61ffff90818116906124d5821515612492565b82841691821115612548575b81838216106124f05750505090565b8281101561253357600c6003820201805463ffffffff19166001179055821680831461251e576001016124e1565b60246000634e487b7160e01b81526011600452fd5b60246000634e487b7160e01b81526032600452fd5b9250505090565b80518210156123a45760209160051b010190565b919293909363ffffffff93848616156126085761258584959661258c95612415565b809561264d565b929091818351168282168181146000146125ad575050505060209150015190565b855184169081036125c45750505050506020015190565b602094928461205061260598886125f06125e561246c9a986125fd98612415565b95858a511690612415565b9701519889910151612262565b911690611f3e565b90565b929150935061ffff8410156123a457612628600360209502600c0161229b565b92808451169082160361263d575b5050015190565b61264692612438565b3880612636565b9091946126586123f6565b506126616123f6565b9361ffff96878210156123a457600397600c966126818a8502890161229b565b63ffffffff9361269589868451168a6128b1565b61286a575050506126a988612355856122ce565b818110156123a457896126be9102880161229b565b9260409387848683015115612839575b6126da925116886128b1565b1561280f57816127008a61235583946126f16123f6565b506126fa6123f6565b506122ce565b1698169661270e888a61242b565b60001999818b01918211610ef4575b612727828261242b565b91600192831c926127388c85611f34565b868110156123a4578e61274d9102860161229b565b9088820151156127f957840190818511610ef45761276b8d83611f34565b90878210156123a4578f612783908d9302880161229b565b908d612793818c845116866128b1565b938491826127e3575b50506127cf5750506127c25750508a8201918211610ef45761272791905b90915061271d565b90915061272792506127ba565b9f509d50989b505050505050505050505050565b6127f292508c855116916128b1565b8d8f61279c565b919250508201809211610ef457612727916127ba565b835162461bcd60e51b815260206004820152602481018b90526213d31160ea1b6044820152606490fd5b6126da9250865161284981611d43565b818c54168152600d54602082015260ff600e541615158882015292506126ce565b979650975098505091955050808451169082161460001461288b5750509190565b82612605939550612438565b9064010000000064ffffffffff80931601918211610ef457565b63ffffffff808092169216828111801580612914575b61290957156128fa57925b16908111156128ec575b64ffffffffff8091169116111590565b6128f590612897565b6128dc565b61290390612897565b926128d2565b509290915016101590565b508383861611156128c7565b906103e8820191828111610ef457821061293657565b60405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b6044820152606490fd5b919061297e908361242b565b91821061293657565b91906129939083612262565b91821161299c57565b60405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606490fd5b906127109182810292818404811482151715610ef4578304036129f857565b60405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606490fd5b600092918015918215612a4b575b5050156129f857565b91509250612a63612a5c8483611f3e565b9384611f14565b143880612a4256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220fb49a87920e850bf1e0728a7c7ac20e118520eaed823d6f46dd1537fdb6d5f6464736f6c63430008120033