60a06040523480156200001157600080fd5b506040516200502838038062005028833981016040819052620000349162000404565b84848484838383838080620000493362000144565b6001600160a01b03166080525081620000b45760405162461bcd60e51b8152602060048201526024808201527f6d696e476173546f5472616e73666572416e6453746f7265206d7573742062656044820152630203e20360e41b606482015260840160405180910390fd5b506006558151620000cd90600c90602085019062000274565b508051620000e390600d90602084019062000274565b506001600a5550620001019450859350610115925050620001949050565b604080513381524260208201527faf354defc104ba9267634f156652b1f1cfbd10746c329e2bdd48abd4c9cff929910160405180910390a15050505050620004d9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600a546000829003620001ba5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b0383166000818152600f602090815260408083208054680100000000000000018802019055848352600e90915281206001851460e11b4260a01b17831790558284019083908390600080516020620050088339815191528180a4600183015b81811462000249578083600060008051602062005008833981519152600080a460010162000220565b50816000036200026b57604051622e076360e81b815260040160405180910390fd5b600a5550505050565b82805462000282906200049d565b90600052602060002090601f016020900481019282620002a65760008555620002f1565b82601f10620002c157805160ff1916838001178555620002f1565b82800160010185558215620002f1579182015b82811115620002f1578251825591602001919060010190620002d4565b50620002ff92915062000303565b5090565b5b80821115620002ff576000815560010162000304565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200034257600080fd5b81516001600160401b03808211156200035f576200035f6200031a565b604051601f8301601f19908116603f011681019082821181831017156200038a576200038a6200031a565b81604052838152602092508683858801011115620003a757600080fd5b600091505b83821015620003cb5785820183015181830184015290820190620003ac565b83821115620003dd5760008385830101525b9695505050505050565b80516001600160a01b0381168114620003ff57600080fd5b919050565b600080600080600060a086880312156200041d57600080fd5b85516001600160401b03808211156200043557600080fd5b6200044389838a0162000330565b965060208801519150808211156200045a57600080fd5b50620004698882890162000330565b945050604086015192506200048160608701620003e7565b91506200049160808701620003e7565b90509295509295909350565b600181811c90821680620004b257607f821691505b602082108103620004d357634e487b7160e01b600052602260045260246000fd5b50919050565b608051614adb6200052d60003960008181610a9d01528181610d210152818161104c01528181611278015281816116b2015281816120de015281816127e40152818161291a01526136cd0152614adb6000f3fe6080604052600436106103d85760003560e01c80638cfd8f5c116101fd578063baf3292d11610118578063d12473a5116100ab578063eb8d72b71161007a578063eb8d72b714610c71578063f235364114610c91578063f2fde38b14610cb1578063f5ecbdbc14610cd1578063fa25f9b614610cf157600080fd5b8063d12473a514610bd5578063d1deba1f14610bf5578063df2a5b3b14610c08578063e985e9c514610c2857600080fd5b8063c6291db0116100e7578063c6291db014610b48578063c87b56dd14610b75578063cbed8b9c14610b95578063ce3151a914610bb557600080fd5b8063baf3292d14610ad2578063beb12c9d14610af2578063c03afb5914610b12578063c446183414610b3257600080fd5b80639f38369a11610190578063af3fb21c1161015f578063af3fb21c14610a3c578063b1c9fe6e14610a64578063b353aaa714610a8b578063b88d4fde14610abf57600080fd5b80639f38369a146109c9578063a22cb465146109e9578063a6c3d16514610a09578063ab3ffb9314610a2957600080fd5b8063958f1170116101cc578063958f11701461096a57806395d89b411461097f5780639dfbcde8146109945780639ea5d6b1146109a957600080fd5b80638cfd8f5c146108d45780638da5cb5b1461090c5780638ffa1f2a1461092a578063950c8a741461094a57600080fd5b80633319a00d116102f8578063519056361161028b57806366ad5c8a1161025a57806366ad5c8a1461082757806370a0823114610847578063715018a6146108675780637533d7881461087c57806375b992e21461089c57600080fd5b8063519056361461078557806355b48e18146107985780635b8c41e6146107b85780636352211e1461080757600080fd5b806342842e0e116102c757806342842e0e1461070f57806342d65a8d1461072257806348288190146107425780634ac3f4ff1461075857600080fd5b80633319a00d14610682578063361b4c58146106a25780633d8b38f6146106c25780633f1f4fa4146106e257600080fd5b80630df374831161037057806322a3ecf91161033f57806322a3ecf9146105a157806323b872dd146106245780632a205e3d1461063757806332cb6b0c1461066c57600080fd5b80630df374831461050157806310ddb13714610521578063150b7a021461054157806318160ddd1461057a57600080fd5b806307e0db17116103ac57806307e0db1714610476578063081812fc14610496578063095ea7b3146104ce5780630b4cad4c146104e157600080fd5b80621d3567146103dd57806301ffc9a7146103ff57806302fe53051461043457806306fdde0314610454575b600080fd5b3480156103e957600080fd5b506103fd6103f8366004613a61565b610d1e565b005b34801561040b57600080fd5b5061041f61041a366004613b0a565b610f4f565b60405190151581526020015b60405180910390f35b34801561044057600080fd5b506103fd61044f366004613bd2565b610f7a565b34801561046057600080fd5b50610469610f99565b60405161042b9190613c72565b34801561048257600080fd5b506103fd610491366004613c85565b61102b565b3480156104a257600080fd5b506104b66104b1366004613ca0565b6110b4565b6040516001600160a01b03909116815260200161042b565b6103fd6104dc366004613cd9565b6110f8565b3480156104ed57600080fd5b506103fd6104fc366004613ca0565b611198565b34801561050d57600080fd5b506103fd61051c366004613d05565b611238565b34801561052d57600080fd5b506103fd61053c366004613c85565b611257565b34801561054d57600080fd5b5061056161055c366004613d41565b6112af565b6040516001600160e01b0319909116815260200161042b565b34801561058657600080fd5b50600b54600a5403600019015b60405190815260200161042b565b3480156105ad57600080fd5b506105f56105bc366004613ca0565b60096020526000908152604090208054600182015460029092015461ffff821692620100009092046001600160a01b0316919060ff1684565b6040805161ffff90951685526001600160a01b039093166020850152918301521515606082015260800161042b565b6103fd610632366004613dac565b6112c0565b34801561064357600080fd5b50610657610652366004613dfb565b611459565b6040805192835260208301919091520161042b565b34801561067857600080fd5b506105936105dc81565b34801561068e57600080fd5b506103fd61069d366004613cd9565b61147f565b3480156106ae57600080fd5b506103fd6106bd366004613cd9565b61150c565b3480156106ce57600080fd5b5061041f6106dd366004613e8d565b6115ab565b3480156106ee57600080fd5b506105936106fd366004613c85565b60036020526000908152604090205481565b6103fd61071d366004613dac565b611678565b34801561072e57600080fd5b506103fd61073d366004613e8d565b611693565b34801561074e57600080fd5b5061059360065481565b34801561076457600080fd5b50610593610773366004613c85565b60076020526000908152604090205481565b6103fd610793366004613edf565b611719565b3480156107a457600080fd5b506103fd6107b3366004613fa7565b611730565b3480156107c457600080fd5b506105936107d336600461400e565b6005602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b34801561081357600080fd5b506104b6610822366004613ca0565b611778565b34801561083357600080fd5b506103fd610842366004613a61565b611783565b34801561085357600080fd5b5061059361086236600461406b565b611857565b34801561087357600080fd5b506103fd6118a5565b34801561088857600080fd5b50610469610897366004613c85565b6118b9565b3480156108a857600080fd5b506105936108b7366004614088565b601560209081526000928352604080842090915290825290205481565b3480156108e057600080fd5b506105936108ef3660046140bd565b600260209081526000928352604080842090915290825290205481565b34801561091857600080fd5b506000546001600160a01b03166104b6565b34801561093657600080fd5b506103fd6109453660046140e7565b611953565b34801561095657600080fd5b506004546104b6906001600160a01b031681565b34801561097657600080fd5b5061059360e081565b34801561098b57600080fd5b50610469611b8c565b3480156109a057600080fd5b50610593611b9b565b3480156109b557600080fd5b506103fd6109c4366004613d05565b611bab565b3480156109d557600080fd5b506104696109e4366004613c85565b611c62565b3480156109f557600080fd5b506103fd610a0436600461411b565b611d71565b348015610a1557600080fd5b506103fd610a24366004613e8d565b611ddd565b6103fd610a373660046141dd565b611e70565b348015610a4857600080fd5b50610a51600181565b60405161ffff909116815260200161042b565b348015610a7057600080fd5b50601354610a7e9060ff1681565b60405161042b91906142a8565b348015610a9757600080fd5b506104b67f000000000000000000000000000000000000000000000000000000000000000081565b6103fd610acd366004613d41565b611e7f565b348015610ade57600080fd5b506103fd610aed36600461406b565b611ec3565b348015610afe57600080fd5b506103fd610b0d36600461406b565b611f19565b348015610b1e57600080fd5b506103fd610b2d3660046142d0565b611fd2565b348015610b3e57600080fd5b5061059361271081565b348015610b5457600080fd5b50610593610b633660046142d0565b60146020526000908152604090205481565b348015610b8157600080fd5b50610469610b90366004613ca0565b61203c565b348015610ba157600080fd5b506103fd610bb03660046142eb565b6120bf565b348015610bc157600080fd5b506103fd610bd0366004614359565b612154565b348015610be157600080fd5b506103fd610bf0366004613d05565b6123d3565b6103fd610c03366004613a61565b612483565b348015610c1457600080fd5b506103fd610c233660046143cd565b612699565b348015610c3457600080fd5b5061041f610c43366004614409565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205460ff1690565b348015610c7d57600080fd5b506103fd610c8c366004613e8d565b61274b565b348015610c9d57600080fd5b50610657610cac366004614437565b6127a5565b348015610cbd57600080fd5b506103fd610ccc36600461406b565b612870565b348015610cdd57600080fd5b50610469610cec3660046144b4565b6128e9565b348015610cfd57600080fd5b50610593610d0c366004613c85565b60086020526000908152604090205481565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610d9b5760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff861660009081526001602052604081208054610db990614501565b80601f0160208091040260200160405190810160405280929190818152602001828054610de590614501565b8015610e325780601f10610e0757610100808354040283529160200191610e32565b820191906000526020600020905b815481529060010190602001808311610e1557829003601f168201915b50505050509050805186869050148015610e4d575060008151115b8015610e75575080516020820120604051610e6b908890889061453b565b6040518091039020145b610ed05760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f6044820152651b9d1c9858dd60d21b6064820152608401610d92565b610f468787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061299a92505050565b50505050505050565b60006001600160e01b031982166322bac5d960e01b1480610f745750610f7482612a13565b92915050565b610f82612a61565b8051610f959060129060208401906138de565b5050565b6060600c8054610fa890614501565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd490614501565b80156110215780601f10610ff657610100808354040283529160200191611021565b820191906000526020600020905b81548152906001019060200180831161100457829003601f168201915b5050505050905090565b611033612a61565b6040516307e0db1760e01b815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307e0db17906024015b600060405180830381600087803b15801561109957600080fd5b505af11580156110ad573d6000803e3d6000fd5b5050505050565b60006110bf82612abb565b6110dc576040516333d1c03960e21b815260040160405180910390fd5b506000908152601060205260409020546001600160a01b031690565b600061110382611778565b9050336001600160a01b0382161461113c5761111f8133610c43565b61113c576040516367d9dca160e11b815260040160405180910390fd5b60008281526010602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6111a0612a61565b600081116111fc5760405162461bcd60e51b8152602060048201526024808201527f6d696e476173546f5472616e73666572416e6453746f7265206d7573742062656044820152630203e20360e41b6064820152608401610d92565b60068190556040518181527ffebbc4f8bb9ec2313950c718d43123124b15778efda4c1f1d529de2995b4f34d906020015b60405180910390a150565b611240612a61565b61ffff909116600090815260036020526040902055565b61125f612a61565b6040516310ddb13760e01b815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906310ddb1379060240161107f565b630a85bd0160e11b5b949350505050565b60006112cb82612af0565b9050836001600160a01b0316816001600160a01b0316146112fe5760405162a1148160e81b815260040160405180910390fd5b60008281526010602052604090208054338082146001600160a01b0388169091141761134b5761132e8633610c43565b61134b57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661137257604051633a954ecd60e21b815260040160405180910390fd5b801561137d57600082555b6001600160a01b038681166000908152600f60205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b176000858152600e6020526040812091909155600160e11b8416900361140f57600184016000818152600e6020526040812054900361140d57600a54811461140d576000818152600e602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b600080611471878761146a88612b5f565b87876127a5565b915091509550959350505050565b611487612a61565b816001600160a01b03166323b872dd306114a96000546001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260448101849052606401600060405180830381600087803b1580156114f857600080fd5b505af1158015611451573d6000803e3d6000fd5b611514612a61565b816001600160a01b031663a9059cbb6115356000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a6919061454b565b505050565b61ffff8316600090815260016020526040812080548291906115cc90614501565b80601f01602080910402602001604051908101604052809291908181526020018280546115f890614501565b80156116455780601f1061161a57610100808354040283529160200191611645565b820191906000526020600020905b81548152906001019060200180831161162857829003601f168201915b50505050509050838360405161165c92919061453b565b60405180910390208180519060200120149150505b9392505050565b6115a683838360405180602001604052806000815250611e7f565b61169b612a61565b6040516342d65a8d60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342d65a8d906116eb90869086908690600401614591565b600060405180830381600087803b15801561170557600080fd5b505af1158015610f46573d6000803e3d6000fd5b610f4687878761172888612b5f565b878787612baa565b611738612a61565b806014600084600381111561174f5761174f614292565b600381111561176057611760614292565b81526020810191909152604001600020905190555050565b6000610f7482612af0565b3330146117e15760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d7573742062656044820152650204c7a4170760d41b6064820152608401610d92565b6114518686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250612d7e92505050565b60006001600160a01b038216611880576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600f60205260409020546001600160401b031690565b6118ad612a61565b6118b76000612ed5565b565b600160205260009081526040902080546118d290614501565b80601f01602080910402602001604051908101604052809291908181526020018280546118fe90614501565b801561194b5780601f106119205761010080835404028352916020019161194b565b820191906000526020600020905b81548152906001019060200180831161192e57829003601f168201915b505050505081565b80516020808301919091206000818152600990925260409091206002015460ff166119b45760405162461bcd60e51b81526020600482015260116024820152701b9bc818dc99591a5d1cc81cdd1bdc9959607a1b6044820152606401610d92565b6000828060200190518101906119ca91906145f4565b60008481526009602052604081208054600190910154929450909250611a069161ffff8216916201000090046001600160a01b03169085612f25565b6000848152600960205260409020600101549091508111611a7b5760405162461bcd60e51b815260206004820152602960248201527f6e6f7420656e6f7567682067617320746f2070726f6365737320637265646974604482015268103a3930b739b332b960b91b6064820152608401610d92565b81518103611af25760008381526009602052604080822080546001600160b01b031916815560018101929092556002909101805460ff19169055517fd7be02b8dd0d27bd0517a9cb4d7469ce27df4313821ae5ec1ff69acc594ba23390611ae59085815260200190565b60405180910390a1611b86565b60408051608081018252600085815260096020818152848320805461ffff80821687526001600160a01b03620100008084048216868a019081529989018b8152600160608b01818152998f90529790965297519851169096026001600160b01b03199091169690951695909517939093178455915191830191909155516002909101805491151560ff199092169190911790555b50505050565b6060600d8054610fa890614501565b611ba860e06105dc6146c4565b81565b611bb3612a61565b60008111611c0e5760405162461bcd60e51b815260206004820152602260248201527f647374436861696e4964546f42617463684c696d6974206d757374206265203e604482015261020360f41b6064820152608401610d92565b61ffff8216600081815260076020908152604091829020849055815192835282018390527f7315f7654d594ead24a30160ed9ba2d23247f543016b918343591e93d7afdb6d91015b60405180910390a15050565b61ffff8116600090815260016020526040812080546060929190611c8590614501565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb190614501565b8015611cfe5780601f10611cd357610100808354040283529160200191611cfe565b820191906000526020600020905b815481529060010190602001808311611ce157829003601f168201915b505050505090508051600003611d565760405162461bcd60e51b815260206004820152601d60248201527f4c7a4170703a206e6f20747275737465642070617468207265636f72640000006044820152606401610d92565b611671600060148351611d6991906146c4565b839190612f71565b3360008181526011602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611de5612a61565b818130604051602001611dfa939291906146db565b60408051601f1981840301815291815261ffff85166000908152600160209081529190208251611e2f939192909101906138de565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce838383604051611e6393929190614591565b60405180910390a1505050565b610f4687878787878787612baa565b611e8a8484846112c0565b6001600160a01b0383163b15611b8657611ea68484848461307e565b611b86576040516368d2bf6b60e11b815260040160405180910390fd5b611ecb612a61565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b9060200161122d565b611f21612a61565b600b54600a540360001901611f3960e06105dc6146c4565b8110158015611f4957506105dc81105b611f845760405162461bcd60e51b815260206004820152600c60248201526b189858dac81d1bc81a985a5b60a21b6044820152606401610d92565b611f8f826001613166565b611f9a816001614701565b6040516001600160a01b038416907f14ef1f17ccb0641bfc2ad74a52e62f06378248e6e01e392d2b5a8674afd33b6190600090a35050565b611fda612a61565b6013805482919060ff19166001836003811115611ff957611ff9614292565b021790555080600381111561201057612010614292565b6040517fed606d544c2202d032d2626c390923e6f260ca5d89625bba0cfe70d2bdda4e8f90600090a250565b606061204782612abb565b61206457604051630a14c4b560e41b815260040160405180910390fd5b600061206e613264565b9050805160000361208e5760405180602001604052806000815250611671565b8061209884613273565b6040516020016120a9929190614719565b6040516020818303038152906040529392505050565b6120c7612a61565b6040516332fb62e760e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c9061211b9088908890889088908890600401614748565b600060405180830381600087803b15801561213557600080fd5b505af1158015612149573d6000803e3d6000fd5b505050505050505050565b600b54600a54339160009103600019019050600060135460ff16600381111561217f5761217f614292565b036121b65760405162461bcd60e51b81526020600482015260076024820152662161637469766560c81b6044820152606401610d92565b6121c18285856132b7565b6121f35760405162461bcd60e51b8152602060048201526003602482015262085ddb60ea1b6044820152606401610d92565b61220060e06105dc6146c4565b811061223e5760405162461bcd60e51b815260206004820152600d60248201526c3e206d696e7420737570706c7960981b6044820152606401610d92565b6001600160a01b038216321461227f5760405162461bcd60e51b8152600401610d929060208082526004908201526308589bdd60e21b604082015260600190565b6001600160a01b0382166000908152601560205260408120601354829060ff1660038111156122b0576122b0614292565b60038111156122c1576122c1614292565b81526020019081526020016000205490508060001461230c5760405162461bcd60e51b815260206004820152600760248201526606e7574206361760cc1b6044820152606401610d92565b612317836001613166565b612322816001614701565b6001600160a01b038416600090815260156020526040812060135490919060ff16600381111561235457612354614292565b600381111561236557612365614292565b815260208101919091526040016000205560135460ff16600381111561238d5761238d614292565b612398836001614701565b6040516001600160a01b038616907fda38589bd55f26501f10abeade560e06b0ccc88f007f2811d1288ea9725c342190600090a45050505050565b6123db612a61565b600081116124375760405162461bcd60e51b815260206004820152602360248201527f647374436861696e4964546f5472616e73666572476173206d7573742062652060448201526203e20360ec1b6064820152608401610d92565b61ffff8216600081815260086020908152604091829020849055815192835282018390527fc46df2983228ac2d9754e94a0d565e6671665dc8ad38602bc8e544f0685a29fb9101611c56565b61ffff861660009081526005602052604080822090516124a6908890889061453b565b90815260408051602092819003830190206001600160401b038716600090815292529020549050806125265760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201526261676560e81b6064820152608401610d92565b80838360405161253792919061453b565b6040518091039020146125965760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f616044820152601960fa1b6064820152608401610d92565b61ffff871660009081526005602052604080822090516125b9908990899061453b565b90815260408051602092819003830181206001600160401b038916600090815290845282902093909355601f88018290048202830182019052868252612651918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250612d7e92505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e58787878785604051612688959493929190614781565b60405180910390a150505050505050565b6126a1612a61565b600081116126e95760405162461bcd60e51b81526020600482015260156024820152744c7a4170703a20696e76616c6964206d696e47617360581b6044820152606401610d92565b61ffff83811660008181526002602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac090606001611e63565b612753612a61565b61ffff83166000908152600160205260409020612771908383613962565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051611e6393929190614591565b600080600086866040516020016127bd9291906147f7565b60408051601f198184030181529082905263040a7bb160e41b825291506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340a7bb1090612821908b90309086908b908b9060040161481c565b6040805180830381865afa15801561283d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128619190614870565b92509250509550959350505050565b612878612a61565b6001600160a01b0381166128dd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d92565b6128e681612ed5565b50565b604051633d7b2f6f60e21b815261ffff808616600483015284166024820152306044820152606481018290526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f5ecbdbc90608401600060405180830381865afa158015612969573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129919190810190614894565b95945050505050565b6000806129fd5a60966366ad5c8a60e01b898989896040516024016129c294939291906148c8565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915230929190613393565b915091508161145157611451868686868561341d565b60006301ffc9a760e01b6001600160e01b031983161480612a4457506380ac58cd60e01b6001600160e01b03198316145b80610f745750506001600160e01b031916635b5e139f60e01b1490565b6000546001600160a01b031633146118b75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d92565b600081600111158015612acf5750600a5482105b8015610f745750506000908152600e6020526040902054600160e01b161590565b60008180600111612b4657600a54811015612b46576000818152600e602052604081205490600160e01b82169003612b44575b806000036116715750600019016000818152600e6020526040902054612b23565b505b604051636f96cda160e11b815260040160405180910390fd5b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612b9957612b99614906565b602090810291909101015292915050565b6000845111612bf15760405162461bcd60e51b8152602060048201526013602482015272746f6b656e4964735b5d20697320656d70747960681b6044820152606401610d92565b835160011480612c15575061ffff8616600090815260076020526040902054845111155b612c6c5760405162461bcd60e51b815260206004820152602260248201527f62617463682073697a65206578636565647320647374206261746368206c696d6044820152611a5d60f21b6064820152608401610d92565b60005b8451811015612caf57612c9d888888888581518110612c9057612c90614906565b60200260200101516134ba565b80612ca78161491c565b915050612c6f565b5060008585604051602001612cc59291906147f7565b6040516020818303038152906040529050612d0a876001848851600860008d61ffff1661ffff16815260200190815260200160002054612d059190614935565b6134c5565b612d188782868686346135a4565b85604051612d269190614954565b6040518091039020886001600160a01b03168861ffff167fe1b87c47fdeb4f9cbadbca9df3af7aba453bb6e501075d0440d88125b711522a88604051612d6c9190614970565b60405180910390a45050505050505050565b60008082806020019051810190612d9591906145f4565b601482015191935091506000612dad88838386612f25565b90508251811015612e815784516020808701919091206040805160808101825261ffff808d1682526001600160a01b0380881683870190815283850188815260016060860181815260008981526009909a529887902095518654935190941662010000026001600160b01b03199093169390941692909217178355519082015592516002909301805493151560ff199094169390931790925590517f10e0b70d256bccc84b7027506978bd8b68984a870788b93b479def144c839ad790612e779083908990614983565b60405180910390a1505b816001600160a01b031687604051612e999190614954565b60405180910390208961ffff167f5b821db8a46f8ecbe1941ba2f51cfeea9643268b56631f70d45e2a745d99026586604051612d6c9190614970565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000825b8251811015612991576006545a1061299157612f5f8686858481518110612f5257612f52614906565b6020026020010151613749565b80612f698161491c565b915050612f29565b606081612f7f81601f614701565b1015612fbe5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610d92565b612fc88284614701565b8451101561300c5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610d92565b60608215801561302b5760405191506000825260208201604052613075565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561306457805183526020928301920161304c565b5050858452601f01601f1916604052505b50949350505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906130b390339089908890889060040161499c565b6020604051808303816000875af19250505080156130ee575060408051601f3d908101601f191682019092526130eb918101906149cf565b60015b61314c573d80801561311c576040519150601f19603f3d011682016040523d82523d6000602084013e613121565b606091505b508051600003613144576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506112b8565b600a54600082900361318b5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b0383166000818152600f602090815260408083208054680100000000000000018802019055848352600e90915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461323a57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101613202565b508160000361325b57604051622e076360e81b815260040160405180910390fd5b600a5550505050565b606060128054610fa890614501565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a90048061328d5750819003601f19909101908152919050565b6040516bffffffffffffffffffffffff19606085901b166020820152600090819060340160408051601f198184030181529190528051602090910120601354909150600090601490829060ff16600381111561331557613315614292565b600381111561332657613326614292565b815260208101919091526040016000205490508061334957600192505050611671565b6133898585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508592508691506137829050565b9695505050505050565b6000606060008060008661ffff166001600160401b038111156133b8576133b8613b27565b6040519080825280601f01601f1916602001820160405280156133e2576020820181803683370190505b50905060008087516020890160008d8df191503d925086831115613404578692505b828152826000602083013e909890975095505050505050565b8180519060200120600560008761ffff1661ffff1681526020019081526020016000208560405161344e9190614954565b9081526040805191829003602090810183206001600160401b0388166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c906134ab90879087908790879087906149ec565b60405180910390a15050505050565b611b86843083611678565b60006134d083613798565b61ffff808716600090815260026020908152604080832093891683529290529081205491925090613502908490614701565b9050600081116135545760405162461bcd60e51b815260206004820152601a60248201527f4c7a4170703a206d696e4761734c696d6974206e6f74207365740000000000006044820152606401610d92565b808210156114515760405162461bcd60e51b815260206004820152601b60248201527f4c7a4170703a20676173206c696d697420697320746f6f206c6f7700000000006044820152606401610d92565b61ffff8616600090815260016020526040812080546135c290614501565b80601f01602080910402602001604051908101604052809291908181526020018280546135ee90614501565b801561363b5780601f106136105761010080835404028352916020019161363b565b820191906000526020600020905b81548152906001019060200180831161361e57829003601f168201915b5050505050905080516000036136ac5760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201526f61207472757374656420736f7572636560801b6064820152608401610d92565b6136b78787516137f4565b60405162c5803160e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c580310090849061370e908b9086908c908c908c908c90600401614a3e565b6000604051808303818588803b15801561372757600080fd5b505af115801561373b573d6000803e3d6000fd5b505050505050505050505050565b61375281612abb565b801561376e57503061376382611778565b6001600160a01b0316145b61377757600080fd5b6115a6308383611678565b60008261378f8584613865565b14949350505050565b60006022825110156137ec5760405162461bcd60e51b815260206004820152601c60248201527f4c7a4170703a20696e76616c69642061646170746572506172616d73000000006044820152606401610d92565b506022015190565b61ffff82166000908152600360205260408120549081900361381557506127105b808211156115a65760405162461bcd60e51b815260206004820181905260248201527f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c617267656044820152606401610d92565b600081815b84518110156138aa576138968286838151811061388957613889614906565b60200260200101516138b2565b9150806138a28161491c565b91505061386a565b509392505050565b60008183106138ce576000828152602084905260409020611671565b5060009182526020526040902090565b8280546138ea90614501565b90600052602060002090601f01602090048101928261390c5760008555613952565b82601f1061392557805160ff1916838001178555613952565b82800160010185558215613952579182015b82811115613952578251825591602001919060010190613937565b5061395e9291506139d6565b5090565b82805461396e90614501565b90600052602060002090601f0160209004810192826139905760008555613952565b82601f106139a95782800160ff19823516178555613952565b82800160010185558215613952579182015b828111156139525782358255916020019190600101906139bb565b5b8082111561395e57600081556001016139d7565b803561ffff811681146139fd57600080fd5b919050565b60008083601f840112613a1457600080fd5b5081356001600160401b03811115613a2b57600080fd5b602083019150836020828501011115613a4357600080fd5b9250929050565b80356001600160401b03811681146139fd57600080fd5b60008060008060008060808789031215613a7a57600080fd5b613a83876139eb565b955060208701356001600160401b0380821115613a9f57600080fd5b613aab8a838b01613a02565b9097509550859150613abf60408a01613a4a565b94506060890135915080821115613ad557600080fd5b50613ae289828a01613a02565b979a9699509497509295939492505050565b6001600160e01b0319811681146128e657600080fd5b600060208284031215613b1c57600080fd5b813561167181613af4565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613b6557613b65613b27565b604052919050565b60006001600160401b03821115613b8657613b86613b27565b50601f01601f191660200190565b6000613ba7613ba284613b6d565b613b3d565b9050828152838383011115613bbb57600080fd5b828260208301376000602084830101529392505050565b600060208284031215613be457600080fd5b81356001600160401b03811115613bfa57600080fd5b8201601f81018413613c0b57600080fd5b6112b884823560208401613b94565b60005b83811015613c35578181015183820152602001613c1d565b83811115611b865750506000910152565b60008151808452613c5e816020860160208601613c1a565b601f01601f19169290920160200192915050565b6020815260006116716020830184613c46565b600060208284031215613c9757600080fd5b611671826139eb565b600060208284031215613cb257600080fd5b5035919050565b6001600160a01b03811681146128e657600080fd5b80356139fd81613cb9565b60008060408385031215613cec57600080fd5b8235613cf781613cb9565b946020939093013593505050565b60008060408385031215613d1857600080fd5b613cf7836139eb565b600082601f830112613d3257600080fd5b61167183833560208501613b94565b60008060008060808587031215613d5757600080fd5b8435613d6281613cb9565b93506020850135613d7281613cb9565b92506040850135915060608501356001600160401b03811115613d9457600080fd5b613da087828801613d21565b91505092959194509250565b600080600060608486031215613dc157600080fd5b8335613dcc81613cb9565b92506020840135613ddc81613cb9565b929592945050506040919091013590565b80151581146128e657600080fd5b600080600080600060a08688031215613e1357600080fd5b613e1c866139eb565b945060208601356001600160401b0380821115613e3857600080fd5b613e4489838a01613d21565b95506040880135945060608801359150613e5d82613ded565b90925060808701359080821115613e7357600080fd5b50613e8088828901613d21565b9150509295509295909350565b600080600060408486031215613ea257600080fd5b613eab846139eb565b925060208401356001600160401b03811115613ec657600080fd5b613ed286828701613a02565b9497909650939450505050565b600080600080600080600060e0888a031215613efa57600080fd5b8735613f0581613cb9565b9650613f13602089016139eb565b955060408801356001600160401b0380821115613f2f57600080fd5b613f3b8b838c01613d21565b965060608a0135955060808a01359150613f5482613cb9565b90935060a089013590613f6682613cb9565b90925060c08901359080821115613f7c57600080fd5b50613f898a828b01613d21565b91505092959891949750929550565b8035600481106139fd57600080fd5b6000808284036040811215613fbb57600080fd5b613fc484613f98565b92506020601f1982011215613fd857600080fd5b50604051602081018181106001600160401b0382111715613ffb57613ffb613b27565b6040526020939093013583525092909150565b60008060006060848603121561402357600080fd5b61402c846139eb565b925060208401356001600160401b0381111561404757600080fd5b61405386828701613d21565b92505061406260408501613a4a565b90509250925092565b60006020828403121561407d57600080fd5b813561167181613cb9565b6000806040838503121561409b57600080fd5b82356140a681613cb9565b91506140b460208401613f98565b90509250929050565b600080604083850312156140d057600080fd5b6140d9836139eb565b91506140b4602084016139eb565b6000602082840312156140f957600080fd5b81356001600160401b0381111561410f57600080fd5b6112b884828501613d21565b6000806040838503121561412e57600080fd5b823561413981613cb9565b9150602083013561414981613ded565b809150509250929050565b60006001600160401b0382111561416d5761416d613b27565b5060051b60200190565b600082601f83011261418857600080fd5b81356020614198613ba283614154565b82815260059290921b840181019181810190868411156141b757600080fd5b8286015b848110156141d257803583529183019183016141bb565b509695505050505050565b600080600080600080600060e0888a0312156141f857600080fd5b873561420381613cb9565b9650614211602089016139eb565b955060408801356001600160401b038082111561422d57600080fd5b6142398b838c01613d21565b965060608a013591508082111561424f57600080fd5b61425b8b838c01614177565b955060808a0135915061426d82613cb9565b81945061427c60a08b01613cce565b935060c08a0135915080821115613f7c57600080fd5b634e487b7160e01b600052602160045260246000fd5b60208101600483106142ca57634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156142e257600080fd5b61167182613f98565b60008060008060006080868803121561430357600080fd5b61430c866139eb565b945061431a602087016139eb565b93506040860135925060608601356001600160401b0381111561433c57600080fd5b61434888828901613a02565b969995985093965092949392505050565b6000806020838503121561436c57600080fd5b82356001600160401b038082111561438357600080fd5b818501915085601f83011261439757600080fd5b8135818111156143a657600080fd5b8660208260051b85010111156143bb57600080fd5b60209290920196919550909350505050565b6000806000606084860312156143e257600080fd5b6143eb846139eb565b92506143f9602085016139eb565b9150604084013590509250925092565b6000806040838503121561441c57600080fd5b823561442781613cb9565b9150602083013561414981613cb9565b600080600080600060a0868803121561444f57600080fd5b614458866139eb565b945060208601356001600160401b038082111561447457600080fd5b61448089838a01613d21565b9550604088013591508082111561449657600080fd5b6144a289838a01614177565b945060608801359150613e5d82613ded565b600080600080608085870312156144ca57600080fd5b6144d3856139eb565b93506144e1602086016139eb565b925060408501356144f181613cb9565b9396929550929360600135925050565b600181811c9082168061451557607f821691505b60208210810361453557634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b60006020828403121561455d57600080fd5b815161167181613ded565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61ffff84168152604060208201526000612991604083018486614568565b600082601f8301126145c057600080fd5b81516145ce613ba282613b6d565b8181528460208386010111156145e357600080fd5b6112b8826020830160208701613c1a565b6000806040838503121561460757600080fd5b82516001600160401b038082111561461e57600080fd5b61462a868387016145af565b935060209150818501518181111561464157600080fd5b85019050601f8101861361465457600080fd5b8051614662613ba282614154565b81815260059190911b8201830190838101908883111561468157600080fd5b928401925b8284101561469f57835182529284019290840190614686565b80955050505050509250929050565b634e487b7160e01b600052601160045260246000fd5b6000828210156146d6576146d66146ae565b500390565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b60008219821115614714576147146146ae565b500190565b6000835161472b818460208801613c1a565b83519083019061473f818360208801613c1a565b01949350505050565b600061ffff808816835280871660208401525084604083015260806060830152614776608083018486614568565b979650505050505050565b61ffff8616815260806020820152600061479f608083018688614568565b6001600160401b0394909416604083015250606001529392505050565b600081518084526020808501945080840160005b838110156147ec578151875295820195908201906001016147d0565b509495945050505050565b60408152600061480a6040830185613c46565b828103602084015261299181856147bc565b61ffff861681526001600160a01b038516602082015260a06040820181905260009061484a90830186613c46565b841515606084015282810360808401526148648185613c46565b98975050505050505050565b6000806040838503121561488357600080fd5b505080516020909101519092909150565b6000602082840312156148a657600080fd5b81516001600160401b038111156148bc57600080fd5b6112b8848285016145af565b61ffff851681526080602082015260006148e56080830186613c46565b6001600160401b038516604084015282810360608401526147768185613c46565b634e487b7160e01b600052603260045260246000fd5b60006001820161492e5761492e6146ae565b5060010190565b600081600019048311821515161561494f5761494f6146ae565b500290565b60008251614966818460208701613c1a565b9190910192915050565b60208152600061167160208301846147bc565b8281526040602082015260006112b86040830184613c46565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061338990830184613c46565b6000602082840312156149e157600080fd5b815161167181613af4565b61ffff8616815260a060208201526000614a0960a0830187613c46565b6001600160401b03861660408401528281036060840152614a2a8186613c46565b905082810360808401526148648185613c46565b61ffff8716815260c060208201526000614a5b60c0830188613c46565b8281036040840152614a6d8188613c46565b6001600160a01b0387811660608601528616608085015283810360a08501529050614a988185613c46565b999850505050505050505056fea26469706673582212206b57e81dd278bbbee0aab887ee725e52dbbd199ec15a1f4abff2b1d1a31a6f0864736f6c634300080d0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67500000000000000000000000076905df68bad78bca25312b2a7619f9b43145262000000000000000000000000000000000000000000000000000000000000000a4d61666961204e7574730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e55540000000000000000000000000000000000000000000000000000000000