0x60806040526127106010553480156200001757600080fd5b50336040518060400160405280600d81526020016c506f6c79205a4b2050756e6b7360981b81525060405180604001604052806008815260200167505a4b50554e4b5360c01b81525081600090816200007191906200017d565b5060016200008082826200017d565b5050600a80546001600160a01b039093166001600160a01b031993841681179091556000908152600b60205260409020805460ff1916600117905550662386f26fc10000600f55601180549091163317905562000249565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200010357607f821691505b6020821081036200012457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200017857600081815260208120601f850160051c81016020861015620001535750805b601f850160051c820191505b8181101562000174578281556001016200015f565b5050505b505050565b81516001600160401b03811115620001995762000199620000d8565b620001b181620001aa8454620000ee565b846200012a565b602080601f831160018114620001e95760008415620001d05750858301515b600019600386901b1c1916600185901b17855562000174565b600085815260208120601f198616915b828110156200021a57888601518255948401946001909101908401620001f9565b5085821015620002395787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611fe980620002596000396000f3fe60806040526004361061019c5760003560e01c806370a08231116100ec578063c87b56dd1161008a578063f2fde38b11610064578063f2fde38b146104bb578063f4a0a528146104db578063f87cafb0146104fb578063fe9fbb801461051b57600080fd5b8063c87b56dd14610432578063e985e9c514610452578063f0b37c041461049b57600080fd5b8063a22cb465116100c6578063a22cb465146103bd578063b6a5d7de146103dd578063b88d4fde146103fd578063c6cf868a1461041d57600080fd5b806370a082311461036857806395d89b4114610388578063a0bcfc7f1461039d57600080fd5b806323b872dd116101595780633b4b1381116101335780633b4b1381146102f557806342842e0e146103085780634f6ccce7146103285780636352211e1461034857600080fd5b806323b872dd146102865780632f54bf6e146102a65780632f745c59146102d557600080fd5b806301ffc9a7146101a157806306fdde03146101d6578063081812fc146101f8578063095ea7b31461023057806318160ddd146102525780631fbe197914610271575b600080fd5b3480156101ad57600080fd5b506101c16101bc3660046118b0565b61053b565b60405190151581526020015b60405180910390f35b3480156101e257600080fd5b506101eb610566565b6040516101cd9190611924565b34801561020457600080fd5b50610218610213366004611937565b6105f8565b6040516001600160a01b0390911681526020016101cd565b34801561023c57600080fd5b5061025061024b366004611965565b610692565b005b34801561025e57600080fd5b506008545b6040519081526020016101cd565b34801561027d57600080fd5b506102506107a7565b34801561029257600080fd5b506102506102a1366004611991565b6107ff565b3480156102b257600080fd5b506101c16102c13660046119d2565b600a546001600160a01b0391821691161490565b3480156102e157600080fd5b506102636102f0366004611965565b610830565b610250610303366004611937565b6108c6565b34801561031457600080fd5b50610250610323366004611991565b610a1b565b34801561033457600080fd5b50610263610343366004611937565b610a36565b34801561035457600080fd5b50610218610363366004611937565b610ac9565b34801561037457600080fd5b506102636103833660046119d2565b610b40565b34801561039457600080fd5b506101eb610bc7565b3480156103a957600080fd5b506102506103b8366004611a7b565b610bd6565b3480156103c957600080fd5b506102506103d8366004611ac4565b610c07565b3480156103e957600080fd5b506102506103f83660046119d2565b610ccb565b34801561040957600080fd5b50610250610418366004611b02565b610d19565b34801561042957600080fd5b50610263610d51565b34801561043e57600080fd5b506101eb61044d366004611937565b610d61565b34801561045e57600080fd5b506101c161046d366004611b82565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156104a757600080fd5b506102506104b63660046119d2565b610d98565b3480156104c757600080fd5b506102506104d63660046119d2565b610de3565b3480156104e757600080fd5b506102506104f6366004611937565b610e7b565b34801561050757600080fd5b50610250610516366004611a7b565b610ea5565b34801561052757600080fd5b506101c16105363660046119d2565b610ed6565b60006001600160e01b0319821663780e9d6360e01b1480610560575061056082610ef4565b92915050565b60606000805461057590611bb0565b80601f01602080910402602001604051908101604052809291908181526020018280546105a190611bb0565b80156105ee5780601f106105c3576101008083540402835291602001916105ee565b820191906000526020600020905b8154815290600101906020018083116105d157829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166106765760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061069d82610ac9565b9050806001600160a01b0316836001600160a01b03160361070a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161066d565b336001600160a01b03821614806107265750610726813361046d565b6107985760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161066d565b6107a28383610f44565b505050565b6107b033610ed6565b6107cc5760405162461bcd60e51b815260040161066d90611bea565b6040514790339082156108fc029083906000818181858888f193505050501580156107fb573d6000803e3d6000fd5b5050565b6108093382610fb2565b6108255760405162461bcd60e51b815260040161066d90611c0f565b6107a28383836110a9565b600061083b83610b40565b821061089d5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161066d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000600f54826108d69190611c76565b90508034146109195760405162461bcd60e51b815260206004820152600f60248201526e4e6f7420656e6f75676820446f676560881b604482015260640161066d565b601054600e541061095c5760405162461bcd60e51b815260206004820152600d60248201526c14dd5c1c1b1e48135a5b9d1959609a1b604482015260640161066d565b6011546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015610995573d6000803e3d6000fd5b5060005b828110156107a2576109af600e80546001019055565b60006109ba600e5490565b90506010548111156109fe5760405162461bcd60e51b815260206004820152600d60248201526c14dd5c1c1b1e481b5a5b9d1959609a1b604482015260640161066d565b610a083382611254565b5080610a1381611c8d565b915050610999565b6107a283838360405180602001604052806000815250610d19565b6000610a4160085490565b8210610aa45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161066d565b60088281548110610ab757610ab7611ca6565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806105605760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161066d565b60006001600160a01b038216610bab5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161066d565b506001600160a01b031660009081526003602052604090205490565b60606001805461057590611bb0565b610bdf33610ed6565b610bfb5760405162461bcd60e51b815260040161066d90611bea565b600c6107fb8282611d0a565b336001600160a01b03831603610c5f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161066d565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b03163314610cf55760405162461bcd60e51b815260040161066d90611dca565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b610d233383610fb2565b610d3f5760405162461bcd60e51b815260040161066d90611c0f565b610d4b8484848461126e565b50505050565b6000610d5c600e5490565b905090565b6060600c610d6e836112a1565b600d604051602001610d8293929190611e5d565b6040516020818303038152906040529050919050565b600a546001600160a01b03163314610dc25760405162461bcd60e51b815260040161066d90611dca565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b600a546001600160a01b03163314610e0d5760405162461bcd60e51b815260040161066d90611dca565b600a80546001600160a01b0319166001600160a01b0383169081179091556000818152600b6020908152604091829020805460ff1916600117905590519182527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b610e8433610ed6565b610ea05760405162461bcd60e51b815260040161066d90611bea565b600f55565b610eae33610ed6565b610eca5760405162461bcd60e51b815260040161066d90611bea565b600d6107fb8282611d0a565b6001600160a01b03166000908152600b602052604090205460ff1690565b60006001600160e01b031982166380ac58cd60e01b1480610f2557506001600160e01b03198216635b5e139f60e01b145b8061056057506301ffc9a760e01b6001600160e01b0319831614610560565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610f7982610ac9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661102b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161066d565b600061103683610ac9565b9050806001600160a01b0316846001600160a01b031614806110715750836001600160a01b0316611066846105f8565b6001600160a01b0316145b806110a157506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166110bc82610ac9565b6001600160a01b0316146111245760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161066d565b6001600160a01b0382166111865760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161066d565b6111918383836113cd565b61119c600082610f44565b6001600160a01b03831660009081526003602052604081208054600192906111c5908490611e90565b90915550506001600160a01b03821660009081526003602052604081208054600192906111f3908490611ea3565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6107fb828260405180602001604052806000815250611485565b6112798484846110a9565b611285848484846114b8565b610d4b5760405162461bcd60e51b815260040161066d90611eb6565b6060816000036112c85750506040805180820190915260018152600360fc1b602082015290565b8160005b81156112f257806112dc81611c8d565b91506112eb9050600a83611f08565b91506112cc565b60008167ffffffffffffffff81111561130d5761130d6119ef565b6040519080825280601f01601f191660200182016040528015611337576020820181803683370190505b509050815b85156113c45761134d600182611e90565b9050600061135c600a88611f08565b61136790600a611c76565b6113719088611e90565b61137c906030611f2a565b905060008160f81b90508084848151811061139957611399611ca6565b60200101906001600160f81b031916908160001a9053506113bb600a89611f08565b9750505061133c565b50949350505050565b6001600160a01b0383166114285761142381600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61144b565b816001600160a01b0316836001600160a01b03161461144b5761144b83826115b9565b6001600160a01b038216611462576107a281611656565b826001600160a01b0316826001600160a01b0316146107a2576107a28282611705565b61148f8383611749565b61149c60008484846114b8565b6107a25760405162461bcd60e51b815260040161066d90611eb6565b60006001600160a01b0384163b156115ae57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906114fc903390899088908890600401611f43565b6020604051808303816000875af1925050508015611537575060408051601f3d908101601f1916820190925261153491810190611f80565b60015b611594573d808015611565576040519150601f19603f3d011682016040523d82523d6000602084013e61156a565b606091505b50805160000361158c5760405162461bcd60e51b815260040161066d90611eb6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506110a1565b506001949350505050565b600060016115c684610b40565b6115d09190611e90565b600083815260076020526040902054909150808214611623576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061166890600190611e90565b6000838152600960205260408120546008805493945090928490811061169057611690611ca6565b9060005260206000200154905080600883815481106116b1576116b1611ca6565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806116e9576116e9611f9d565b6001900381819060005260206000200160009055905550505050565b600061171083610b40565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661179f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161066d565b6000818152600260205260409020546001600160a01b0316156118045760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161066d565b611810600083836113cd565b6001600160a01b0382166000908152600360205260408120805460019290611839908490611ea3565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b0319811681146118ad57600080fd5b50565b6000602082840312156118c257600080fd5b81356118cd81611897565b9392505050565b60005b838110156118ef5781810151838201526020016118d7565b50506000910152565b600081518084526119108160208601602086016118d4565b601f01601f19169290920160200192915050565b6020815260006118cd60208301846118f8565b60006020828403121561194957600080fd5b5035919050565b6001600160a01b03811681146118ad57600080fd5b6000806040838503121561197857600080fd5b823561198381611950565b946020939093013593505050565b6000806000606084860312156119a657600080fd5b83356119b181611950565b925060208401356119c181611950565b929592945050506040919091013590565b6000602082840312156119e457600080fd5b81356118cd81611950565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611a2057611a206119ef565b604051601f8501601f19908116603f01168101908282118183101715611a4857611a486119ef565b81604052809350858152868686011115611a6157600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611a8d57600080fd5b813567ffffffffffffffff811115611aa457600080fd5b8201601f81018413611ab557600080fd5b6110a184823560208401611a05565b60008060408385031215611ad757600080fd5b8235611ae281611950565b915060208301358015158114611af757600080fd5b809150509250929050565b60008060008060808587031215611b1857600080fd5b8435611b2381611950565b93506020850135611b3381611950565b925060408501359150606085013567ffffffffffffffff811115611b5657600080fd5b8501601f81018713611b6757600080fd5b611b7687823560208401611a05565b91505092959194509250565b60008060408385031215611b9557600080fd5b8235611ba081611950565b91506020830135611af781611950565b600181811c90821680611bc457607f821691505b602082108103611be457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761056057610560611c60565b600060018201611c9f57611c9f611c60565b5060010190565b634e487b7160e01b600052603260045260246000fd5b601f8211156107a257600081815260208120601f850160051c81016020861015611ce35750805b601f850160051c820191505b81811015611d0257828155600101611cef565b505050505050565b815167ffffffffffffffff811115611d2457611d246119ef565b611d3881611d328454611bb0565b84611cbc565b602080601f831160018114611d6d5760008415611d555750858301515b600019600386901b1c1916600185901b178555611d02565b600085815260208120601f198616915b82811015611d9c57888601518255948401946001909101908401611d7d565b5085821015611dba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60008154611df781611bb0565b60018281168015611e0f5760018114611e2457611e53565b60ff1984168752821515830287019450611e53565b8560005260208060002060005b85811015611e4a5781548a820152908401908201611e31565b50505082870194505b5050505092915050565b6000611e698286611dea565b8451611e798183602089016118d4565b611e8581830186611dea565b979650505050505050565b8181038181111561056057610560611c60565b8082018082111561056057610560611c60565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082611f2557634e487b7160e01b600052601260045260246000fd5b500490565b60ff818116838216019081111561056057610560611c60565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611f76908301846118f8565b9695505050505050565b600060208284031215611f9257600080fd5b81516118cd81611897565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220c2b0f772be650d022b90959a8378d156009a9d4a9847758f04abb046a1066ff164736f6c63430008130033