0x60806040526004361061009c5760003560e01c80638246336711610064578063824633671461014e5780638da5cb5b14610163578063912e33c7146101785780639c97945014610198578063c4c96dae146101b8578063f667f897146101dc5761009c565b806302f332e8146100a157806324a3d622146100d75780632890fb65146100f957806356a273dd1461010c57806361d0d61c1461012c575b600080fd5b3480156100ad57600080fd5b506100c16100bc36600461439e565b610209565b6040516100ce9190614523565b60405180910390f35b3480156100e357600080fd5b506100ec61038b565b6040516100ce91906143fe565b6100c161010736600461408b565b61039a565b34801561011857600080fd5b506100c16101273660046140cb565b61043e565b34801561013857600080fd5b5061014c61014736600461423f565b61061c565b005b34801561015a57600080fd5b506100ec610656565b34801561016f57600080fd5b506100ec610665565b34801561018457600080fd5b506100c1610193366004614332565b61067c565b3480156101a457600080fd5b5061014c6101b3366004614316565b6108b1565b3480156101c457600080fd5b506101cd6108fe565b6040516100ce93929190614412565b3480156101e857600080fd5b506101fc6101f736600461406f565b610942565b6040516100ce9190614518565b60006002600a54141561021b57600080fd5b6002600a5561ffff841660011461025257816102525760405162461bcd60e51b81526004016102499061462c565b60405180910390fd5b600061025d33610976565b509050610268613d1d565b61027481338885610a3b565b6001600160581b0385811614156102ad57600081602001511361029657600080fd5b6102a38160200151610a5c565b60808201526102c5565b6102bf856001600160581b0316610a5c565b60808201525b60006102d48233858815610a70565b90506102e08333610a8c565b60208301516001600160f81b0319161561035c57604051636ccc642f60e01b815273ea7aa69dbeea9deb4294109bd344f69c79c6fdf790636ccc642f9061032b9033906004016143fe565b60006040518083038186803b15801561034357600080fd5b505af4158015610357573d6000803e3d6000fd5b505050505b600081131561036a57600080fd5b61037b61037682610a5c565b610ba9565b6001600a55979650505050505050565b6002546001600160a01b031681565b60006002600a5414156103ac57600080fd5b6002600a55333014156103be57600080fd5b6103c784610bbc565b60006103d285610c37565b90506103dc613d1d565b6103e881878785610a3b565b6000610401336103f787610ce5565b8491906000610cfb565b90506000811361041057600080fd5b61041b828885610d4d565b6104258388610a8c565b6101208201516104359087610d6c565b61037b81610ba9565b60006002600a54141561045057600080fd5b6002600a55336001600160a01b038516148061046b57503330145b6104875760405162461bcd60e51b8152600401610249906145d6565b6001600160601b038216600061049c86610976565b5090506104a7613d1d565b6104b381888885610a3b565b82816040015112156104d75760405162461bcd60e51b81526004016102499061473a565b6104e083610a5c565b60c0820152604051630e22aaa360e01b815260009073ce3f1d83cecee26b1d4a7010123b86ced67a48d490630e22aaa390610523908b908b9089906004016144c1565b60206040518083038186803b15801561053b57600080fd5b505af415801561054f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610573919061425b565b606083018190529050610587828985610d4d565b6105918389610a8c565b60208301516001600160f81b0319161561037b57604051636ccc642f60e01b815273ea7aa69dbeea9deb4294109bd344f69c79c6fdf790636ccc642f906105dc908b906004016143fe565b60006040518083038186803b1580156105f457600080fd5b505af4158015610608573d6000803e3d6000fd5b505050506001600a55979650505050505050565b3330141561062957600080fd5b61063233610bbc565b600061063d33610976565b5082151560a082015290506106528133610a8c565b5050565b6001546001600160a01b031681565b60005464010000000090046001600160a01b031681565b60006002600a54141561068e57600080fd5b6002600a55600061069e87610daf565b9050336001600160a01b038216146106b557600080fd5b6106be86610bbc565b836001600160a01b0316866001600160a01b0316146107865760006106e1610ddc565b6001600160a01b03808916600090815260209283526040808220928916825291835281812061ffff8c16825290925290205490506001600160581b03841681101561073e5760405162461bcd60e51b8152600401610249906145a6565b836001600160581b03168103610752610ddc565b6001600160a01b03808a16600090815260209283526040808220928a16825291835281812061ffff8d168252909252902055505b600061079187610976565b50905061079c613d1d565b6107a881898b85610a3b565b8060200151856001600160581b031613156107d55760405162461bcd60e51b815260040161024990614663565b6107e7856001600160581b0316610a5c565b608082015260006107fc828a8a866001610de9565b9050610808838a610a8c565b60208301516001600160f81b0319161561088457604051636ccc642f60e01b815273ea7aa69dbeea9deb4294109bd344f69c79c6fdf790636ccc642f90610853908c906004016143fe565b60006040518083038186803b15801561086b57600080fd5b505af415801561087f573d6000803e3d6000fd5b505050505b600081131561089257600080fd5b61089e61037682610a5c565b6001600a559a9950505050505050505050565b333014156108be57600080fd5b60005461ffff90811690821611156108d557600080fd5b3360006108e182610976565b5090506108ef818442610e06565b6108f98183610a8c565b505050565b73ea7aa69dbeea9deb4294109bd344f69c79c6fdf773e10836ba543be91e978fc9b455bf483572a44b2173ce3f1d83cecee26b1d4a7010123b86ced67a48d4909192565b600061094d82610bbc565b60008061095984610976565b91509150801561096d5761096d8285610a8c565b9150505b919050565b61097e613d79565b60008061098a84610c37565b905061099581610efe565b15610a2f576040516337b5fc2160e11b815273e10836ba543be91e978fc9b455bf483572a44b2190636f6bf842906109d3908790859060040161444e565b60c06040518083038186803b1580156109eb57600080fd5b505af41580156109ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a239190614273565b60019250925050610a36565b9150600090505b915091565b610a4482610f52565b610120850152610a5684848484610f64565b50505050565b6000610a6a6000198361100c565b92915050565b6000610a818585868686600161105a565b90505b949350505050565b6000610a96611231565b6001600160a01b03831660008181526020838152604080832088518154938a01518a84015160608c015160808d015160a08e015164ffffffffff1990981664ffffffffff9095169490941765ff00000000001916600160281b60f89490941c939093029290921766ff0000000000001916600160301b60ff909216919091021768ffff000000000000001916600160381b61ffff90921691909102177affffffffffffffffffffffffffffffffffff0000000000000000001916600160481b60709290921c919091021760ff60d81b1916600160d81b93151593909302929092179091555192935090917f6bd4b121bca854a191536a2ca891155c42ee2fb23f307fb34e8bc65cfcb5412e9190a2505050565b600080821215610bb857600080fd5b5090565b6001600160a01b038116610bcf57600080fd5b6001600160a01b038116610fee1415610be757600080fd5b6001600160a01b0381166105e71415610bff57600080fd5b6001600160a01b038116301415610c1557600080fd5b6000610c208261123e565b5050505061ffff1690508060001461065257600080fd5b610c3f613d79565b6000610c49611231565b6001600160a01b03841660009081526020918252604090819020815160c081018352905464ffffffffff811682526001600160f81b0319600160281b820460f81b169382019390935260ff600160301b840481169282019290925261ffff600160381b84041660608201526001600160701b0319600160481b840460701b166080820152600160d81b90920416151560a0820152915050919050565b60006001600160ff1b03821115610bb857600080fd5b600082610d0a57506000610a84565b60008313610d1757600080fd5b610d2d84866000015185886101200151866112a7565b6060870151909250610d40915082611369565b6060860152949350505050565b608083015115610d5c57600080fd5b610a56838384846000600161105a565b600080610d79848461137f565b5050915091508160001415610d8f575050610652565b81811115610a565760405162461bcd60e51b81526004016102499061452c565b6000610db9611444565b61ffff90921660009081526020929092525060409020546001600160a01b031690565b600080610a6a602361144d565b6000610dfa8686868686600161105a565b90505b95945050505050565b610e0f83611466565b15610e2c5760405162461bcd60e51b815260040161024990614691565b8161ffff166000108015610e465750613fff61ffff831611155b610e625760405162461bcd60e51b81526004016102499061470d565b604083015160ff1615610e875760405162461bcd60e51b81526004016102499061457a565b60208301516001600160f81b03191615610eb35760405162461bcd60e51b8152600401610249906146bf565b610ec88361ffff84166000600160fe1b611473565b61ffff821660608401526000610edd82611672565b905064ffffffffff8110610ef057600080fd5b64ffffffffff169092525050565b600042610f0a83611466565b15610f2b57610f1881611672565b835164ffffffffff161091506109719050565b825164ffffffffff1615801590610f4a5750825164ffffffffff168110155b915050610971565b610f5a613dae565b610a6a8242611690565b8161ffff166000108015610f7e5750613fff61ffff831611155b610f8757600080fd5b61ffff8216808552610f9a908290611751565b15610fc957610faf83838661012001516117db565b61010088015260e087015260408601526020850152610fe7565b6000602085018190526040850181905260e085018190526101008501525b50506000606083018190526080830181905260a0830181905260c09092019190915250565b81810260001983141561103c5781158061102e57508282828161102b57fe5b05145b61103757600080fd5b610a6a565b82158061105157508183828161104e57fe5b05145b610a6a57600080fd5b600080600061107a88888b600001518c608001518d61012001518a611895565b925060006110998a608001518b6060015161136990919063ffffffff16565b90508480156110a85750600081125b80156110c3575060208a01516000906110c19083611369565b125b156110ee578660a001516110e95760405162461bcd60e51b815260040161024990614603565b600191505b801561110d5760208a01516111039082611369565b60208b0152600192505b5060a0890151151580611123575060c089015115155b1561118c5760006111538a60c0015161114d8c60a001518d6040015161136990919063ffffffff16565b90611369565b905060008112156111765760405162461bcd60e51b8152600401610249906146e9565b6111818a8a8361193f565b5060408a0152600191505b81156111bb576111bb888a600001518b602001518c604001518d60e001518e61010001518f6101200151611a36565b885160208a01516111e89161ffff16901515806111db575060408b015115155b889190600160fe1b611473565b60008960200151121561120e57602086018051600160f91b176001600160f81b03191690525b80156112255788516101208a015161122591611b71565b50509695505050505050565b600080610a6a600161144d565b60008060008060008061124f611bb4565b6001600160a01b039097166000908152602097909752505060409094205461ffff81169563ffffffff62010000830481169650600160301b830416945060ff600160501b8304169350600160581b90910460d01b9150565b60008060006112b586610ba9565b9050806112c957600080925092505061135f565b60006112d88861ffff16611bc1565b90506003816060015160058111156112ec57fe5b1415611333573482101561130c576113078983340387611bd4565b61132b565b34821461132b5760405162461bcd60e51b815260040161024990614555565b86935061134d565b61134a61134582600001518b85611c9c565b610ce5565b93505b61135a898986848a611e1a565b925050505b9550959350505050565b81810182811215600083121514610a6a57600080fd5b600080600080600061138f611e61565b61ffff871660009081526020919091526040902060018101549091506113c190600160581b900463ffffffff16611e6e565b60018201549095506113eb906064906113e5908890600160781b900460ff16611e7c565b90611eaa565b8154909350600160281b90046001600160581b031661140d6103768983611ec9565b60018301549095506001600160581b03166000036114366103766114318b84611f18565b610a5c565b935050505092959194509250565b600080610a6a60215b6000620f424082602681111561145f57fe5b0192915050565b6060015161ffff16151590565b8260001080156114855750613fff8311155b61148e57600080fd5b8180156114a2575082846060015161ffff16145b156114ac57610a56565b6080840151600090815b6001600160701b03198216156116275760f082901c613fff1686811480156114db5750855b1561151357506080870180516001600160f01b0319861660109093029290921c919091176001600160701b031916905250610a569050565b8681148015611520575085155b15611575576001600160f01b03198516199290921691600360fe1b8316611553576010836001600160701b031916901b92505b506001600160701b031991821660109091021c91909117166080850152610a56565b86811180156115815750855b156115db576080888101516001600160f01b031960f08a901b88178116601086021c9690961795911b16156115b557600080fd5b506001600160701b03199182166001919091016010021c91909117166080850152610a56565b86811180156115e8575085155b156115f65750505050610a56565b506001600160f01b0319821660108281029190911c93909317929190911b6001600160801b031916906001016114b6565b8461163457505050610a56565b6009811061164157600080fd5b6001600160f01b031960f087901b85171660109091021c919091176001600160701b03191660808601525050505050565b60006201518082101561168457600080fd5b50620151808106900390565b611698613dae565b60006116a384611f69565b905082816000015110156116e2576000806116bd86612031565b90506116cb868483886120ae565b90935091506116db868385612152565b50506116ef565b805183146116ef57600080fd5b60405180606001604052806117186113458460a001518560c00151611e7c90919063ffffffff16565b815260200161173b6113458460a001518560e00151611e7c90919063ffffffff16565b8152602001826060015181525091505092915050565b600081158015906117645750613fff8211155b61176d57600080fd5b6080830151606084015161ffff1683141561178c576001915050610a6a565b6001600160701b03198116156117d15760f081901c613fff16838114156117be5750600160fe1b908116149050610a6a565b5060101b6001600160801b03191661178c565b5060009392505050565b60008060008060006117eb612386565b6001600160a01b03891660009081526020828152604080832061ffff8c168452909152902080546001600160501b0381169650600160501b900463ffffffff169450909150831561185857805461185190600160701b900466ffffffffffffff16611e6e565b925061186d565b8054600160701b900466ffffffffffffff1692505b8054611888908890600160a81b9004600a90810b900b612393565b9550505093509350935093565b6000836118a457506000611935565b600084126118b157600080fd5b60006118c08661ffff16611bc1565b90506118d5816118d08688611ec9565b6123c1565b915060006118e283610a5c565b90506118ef8783836123f9565b60038260600151600581111561190157fe5b141561191757611912888286611bd4565b611924565b81516119249089836124ef565b6119318988858589611e1a565b5050505b9695505050505050565b8251600090429082906119559061ffff16612566565b905060006119628261258c565b505090506000611977838960c00151866125e8565b9050611985888483896126cb565b9450600061199284612744565b90506001600160a01b03811615611a1a57806001600160a01b0316633f3ef50d898b600001516119c58d60400151610ba9565b8b886040518663ffffffff1660e01b81526004016119e79594939291906144e6565b600060405180830381600087803b158015611a0157600080fd5b505af1158015611a15573d6000803e3d6000fd5b505050505b8515611a2a57611a2a88876127b6565b50505050509392505050565b6000611a40612386565b6001600160a01b03891660009081526020828152604080832061ffff8c168452909152902090915084611aa85766ffffffffffffff841115611a8157600080fd5b805466ffffffffffffff60701b1916600160701b66ffffffffffffff861602178155611ac2565b8054600160501b900463ffffffff168514611ac257600080fd5b611acb856127d5565b815463ffffffff91909116600160501b0263ffffffff60501b19909116178155611afc611af787610ba9565b6127e8565b815469ffffffffffffffffffff19166001600160501b039190911617808255611b4290611b3d9085908c908c90600160a81b9004600a90810b900b8c6127fe565b612821565b8154600a9190910b6001600160581b0316600160a81b026001600160a81b039091161790555050505050505050565b600080611b7e848461137f565b9350935050508160001415611b94575050610652565b81811115610a565760405162461bcd60e51b815260040161024990614767565b600080610a6a600261144d565b611bc9613dcf565b610a6a826001612853565b8015611c665773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611c2957600080fd5b505af1158015611c3d573d6000803e3d6000fd5b5050505050611c6173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc284846124ef565b6108f9565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015610a56573d6000803e3d6000fd5b600080846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611cec57600080fd5b505afa158015611d00573d6000803e3d6000fd5b505050506040513d6020811015611d1657600080fd5b5051604080516323b872dd60e01b81526001600160a01b038781166004830152306024830152604482018790529151929350908716916323b872dd9160648082019260009290919082900301818387803b158015611d7357600080fd5b505af1158015611d87573d6000803e3d6000fd5b50505050611d936128ed565b6000856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611de257600080fd5b505afa158015611df6573d6000803e3d6000fd5b505050506040513d6020811015611e0c57600080fd5b50519050611935818361295a565b600080611e27848661296f565b9050611e33838261299f565b9150611e408787846129c3565b611e4b868383612a43565b8351611e579086612b4f565b5095945050505050565b600080610a6a601d61144d565b600881901c60ff9091161b90565b600082611e8b57506000610a6a565b82820282848281611e9857fe5b0414611ea357600080fd5b9392505050565b6000808211611eb857600080fd5b818381611ec157fe5b049392505050565b600080611efc6ec097ce7bc90715b34b9f1000000000611ef686600001518661100c90919063ffffffff16565b90612ba4565b905060008312611f0c5780610a84565b610a8481600019612bd5565b600060018212611f2757600080fd5b81611f3457506000610a6a565b611ea36001611f636ec097ce7bc90715b34b9f1000000000611ef687602001518761100c90919063ffffffff16565b90612beb565b611f71613dfe565b6000611f7b611e61565b61ffff93841660009081526020918252604090819020805464ffffffffff81168652600160281b81046001600160581b03908116948701949094526001820154841692860192909252600160d81b820463ffffffff166060860152600160801b9091049091166080840152600201546001600160501b0380821660a0850152600160501b8204811660c0850152600160a01b82041660e0840152600160f01b900460ff1661012c02909216610100820152919050565b60008061203d83612c01565b6001600160a01b031663ef81f2166040518163ffffffff1660e01b81526004016040805180830381600087803b15801561207657600080fd5b505af115801561208a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8491906143db565b6120b6613dfe565b60008060006120c6888689612c31565b60c08b019290925260e08a0192909252602089015191935091506120ea9083612d3c565b60208801526080870151600090156121185760808801516121159061210f898261295a565b90612d4e565b90505b61213861212d670de0b6b3a764000083612d3c565b60a08a015190612d6b565b60a089015250506080860194909452505082529092909150565b600061215c611e61565b60008561ffff16815260200190815260200160002090506121808260000151612d88565b815464ffffffffff191664ffffffffff9190911617815560a08201516121a5906127e8565b60028201805469ffffffffffffffffffff19166001600160501b039290921691909117905560c08201516121d8906127e8565b81600201600a6101000a8154816001600160501b0302191690836001600160501b0316021790555061220d8260e001516127e8565b8160020160146101000a8154816001600160501b0302191690836001600160501b031602179055506122428260200151612d9c565b81546001600160581b0391909116600160281b026fffffffffffffffffffffff000000000019909116178155604082015161227c90612d9c565b6001820180546affffffffffffffffffffff19166001600160581b039290921691909117905560808201516122b090612d9c565b81546001600160581b0391909116600160801b026affffffffffffffffffffff60801b1990911617815560608201516122e8906127d5565b815463ffffffff91909116600160d81b0263ffffffff60d81b19909116178155821561233457600061231984610ce5565b90506123258582612db2565b612332610fee86836129c3565b505b8361ffff167fef25641e225e493886510ca1ad6584fa7b442b9fea820a29d1de3ce27d270fd28360a001518460c001518560e001516040516123789392919061478e565b60405180910390a250505050565b600080610a6a600661144d565b60008082126123a3575080610a6a565b825160208401516123ba9190611ef690859061100c565b9050610a6a565b60006305f5e100836040015114156123da575080610a6a565b611ea36305f5e100611ef685604001518561100c90919063ffffffff16565b6000612403612de9565b83516001600160a01b031660009081526020829052604090205490915080831161242e5750506108f9565b600061243986612c01565b90506000816001600160a01b031663b5e4da238487036040518263ffffffff1660e01b815260040161246b9190614523565b60006040518083038186803b15801561248357600080fd5b505afa158015612497573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124bf9190810190614120565b905060006124cd8783612df6565b90506124d98482612d3c565b8611156124e557600080fd5b5050505050505050565b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561254657600080fd5b505af115801561255a573d6000803e3d6000fd5b505050506108f96128ed565b600080612571613039565b6000938452602052505060409020546001600160a01b031690565b60008060008061259a613046565b6001600160a01b0395909516600090815260209590955250506040909220546001600160601b03811693600160601b82046001600160801b03169350600160e01b90910463ffffffff169150565b60008060006125f78685613053565b50915091506000612606613046565b6001600160a01b038816600090815260208290526040812091925061262b8589611369565b90508060001315801561264457506001600160601b0381105b61264d57600080fd5b81546bffffffffffffffffffffffff19166001600160601b038216176fffffffffffffffffffffffffffffffff60601b1916600160601b6001600160801b0386160217825563ffffffff87106126a257600080fd5b50805463ffffffff8716600160e01b026001600160e01b03909116179055509150509392505050565b60008460e001516000146126de57600080fd5b61271a61271386610100015161270d670de0b6b3a76400006113e5886127078c60400151610ba9565b90611e7c565b9061295a565b8290612d3c565b9050612732670de0b6b3a76400006113e58486611e7c565b85610100018181525050949350505050565b60008061274f611bb4565b6001600160a01b0384166000908152602082905260409020805491925090600160f81b900460ff16156127ab576127846130e9565b6001600160a01b038086166000908152602092909252604090912054169250610971915050565b600092505050610971565b61065273cfeaead4947f0705a14ec42ac3d44129e1ef3ed583836124ef565b600063ffffffff821115610bb857600080fd5b60006001600160501b03821115610bb857600080fd5b600061280a86836130f6565b9050610dfd86868661281c878661312f565b6131b6565b60006a7fffffffffffffffffffff19821280159061284a57506a7fffffffffffffffffffff8213155b610bb857600080fd5b61285b613dcf565b60006128656131ea565b6000858152602082815260408083208715158452825291829020825160a08101845281546001600160a01b038116825260ff600160a01b82048116151594830194909452600160b01b81048416600a0a9482019490945293945092916060830191600160a81b9091041660058111156128da57fe5b8152600060209091015295945050505050565b60006128f7613e4a565b3d801561290b576020811461291457600080fd5b6001925061291f565b60206000833e815192505b5081610652576040805162461bcd60e51b8152602060048201526005602482015264045524332360dc1b604482015290519081900360640190fd5b60008282111561296957600080fd5b50900390565b60006305f5e10083604001511415612988575080610a6a565b6040830151611ea390611ef6846305f5e10061100c565b81516000908190611efc90611ef6856ec097ce7bc90715b34b9f100000000061100c565b60006129cd611444565b61ffff8416600090815260209190915260409081902054905163ad1c095d60e01b81526001600160a01b039091169150819063ad1c095d90612a159087908690600401614435565b600060405180830381600087803b158015612a2f57600080fd5b505af11580156124e5573d6000803e3d6000fd5b6000612a4d611e61565b61ffff8516600090815260209190915260409020805490915064ffffffffff164214612a7857600080fd5b8054600090612a9790600160281b90046001600160581b031685611369565b8254909150600090612ab990600160801b90046001600160581b031685611369565b905080624c4b401315612acb57600080fd5b612adc612ad782610ba9565b612d9c565b83546001600160581b0391909116600160801b026affffffffffffffffffffff60801b19909116178355612b12612ad783610ba9565b83546001600160581b0391909116600160281b026fffffffffffffffffffffff000000000019909116178355612b47836131f7565b505050505050565b6000612b59612de9565b6001600160a01b038416600090815260208290526040902054909150612b826103768285611369565b6001600160a01b03909416600090815260209290925250604090209190915550565b600081600019148015612bba5750600160ff1b83145b15612bc457600080fd5b818381612bcd57fe5b059392505050565b6000818312612be45781611ea3565b5090919050565b80820382811315600083121514610a6a57600080fd5b600080612c0c6132c2565b61ffff939093166000908152602093909352505060409020546001600160a01b031690565b600080600080600080612c4489886132cf565b89519095509193509150600090612c6b90612c60908b9061295a565b633b9aca0090611e7c565b9050612ca5612c9a6301da9c00612c828585611e7c565b81612c8957fe5b670de0b6b3a7640000919004612d3c565b60e08a015190612d6b565b9650612cc7612cbc6301da9c00612c828785611e7c565b60c08a015190612d6b565b955081831415612cde575060009350612d33915050565b6000612d00612cf56301da9c00612c828786611e7c565b60e08b015190612d6b565b90506000612d0e898361295a565b9050612d2b886113e5838d60400151611e7c90919063ffffffff16565b965050505050505b93509350935093565b600082820183811015611ea357600080fd5b6000611ea3612d6584670de0b6b3a7640000611e7c565b83611eaa565b6000611ea3612d7a8484611e7c565b670de0b6b3a7640000611eaa565b600064ffffffffff821115610bb857600080fd5b60006001600160581b03821115610bb857600080fd5b6000811215612dc057600080fd5b6000612dce610fee84613369565b9050612dda8183611369565b90506108f9610fee84836133c2565b600080610a6a602661144d565b6000805b8251811015613032576000838281518110612e1157fe5b60200260200101519050600081606001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612e4d91906143fe565b60206040518083038186803b158015612e6557600080fd5b505afa158015612e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9d919061425b565b90506000612eab8730613436565b905060005b835151811015612efc57612ef484600001518281518110612ecd57fe5b6020026020010151600086602001518481518110612ee757fe5b60200260200101516134e0565b600101612eb0565b506000612f098830613436565b90506000612f17828461295a565b90508085604001511115612f2a57600080fd5b60608501516040516370a0823160e01b81526000916001600160a01b0316906370a0823190612f5d9030906004016143fe565b60206040518083038186803b158015612f7557600080fd5b505afa158015612f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fad919061425b565b905084811115612fbc57600080fd5b608086015160ff1615801590612fdb5750612fd7858261295a565b8214155b15612ff6576080860151612ff390829060ff16612d3c565b90505b6130058660600151868361361d565b61300f8883612d3c565b97506130208a60000151858561361d565b505060019094019350612dfa92505050565b5092915050565b600080610a6a600361144d565b600080610a6a601161144d565b60008060006130618561258c565b9194509250905080841180156130775750600081115b80156130835750600083115b156130e25760006130938661123e565b50505091505060006130be6130b56305f5e10084611e7c90919063ffffffff16565b8488038761369a565b90506130ca8482612d3c565b93506001600160801b0384106130df57600080fd5b50505b9250925092565b600080610a6a601261144d565b600080821215613129576131246001611f638560200151611ef687600001518761100c90919063ffffffff16565b611ea3565b50919050565b60008183148061314c57506000831215801561314c575060008212155b1561315957506000610a6a565b6000831315801561316a5750816000125b15613176575081610a6a565b600082131580156131875750826000125b15613195576123ba82610a5c565b600083131580156131a7575060008213155b1561009c576123ba8383612beb565b8015610a5657835160208501516000916131d591611ef690859061100c565b90506131e3848484846136bc565b5050505050565b600080610a6a600761144d565b8054600282015460009161323991600160281b9091046001600160581b031690613233906001600160501b03600160501b82048116911661100c565b9061100c565b60018301546002840154919250600091613273916001600160581b031690613233906001600160501b03600160a01b82048116911661100c565b83549091506000906132aa9060016001600160581b03600160801b909204821601166ec097ce7bc90715b34b9f100000000061100c565b9050806132b78484612beb565b1315610a5657600080fd5b600080610a6a601f61144d565b60008060008060008560200151111561331c576133196133008660c001518760200151611e7c90919063ffffffff16565b60e0870151604088015161331391611e7c565b90613802565b90505b600061332787613815565b90506133338183613848565b9450811561334a5761334781866001613901565b93505b6020860151156130df5761335e858361397c565b925050509250925092565b600080613374612386565b6001600160a01b03851660009081526020828152604080832061ffff8816845290915281208054600160a81b9004600a90810b900b94509192508312156133ba57600080fd5b505092915050565b60008112156133d057600080fd5b60006133da612386565b6001600160a01b03851660009081526020828152604080832061ffff88168452909152902090915061340b83612821565b8154600a9190910b6001600160581b0316600160a81b026001600160a81b0390911617905550505050565b600060038360600151600581111561344a57fe5b141561346157506001600160a01b03811631610a6a565b82516040516370a0823160e01b81526001600160a01b03909116906370a08231906134909085906004016143fe565b60206040518083038186803b1580156134a857600080fd5b505afa1580156134bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ba919061425b565b600080846001600160a01b031684846040518082805190602001908083835b6020831061351e5780518252601f1990920191602091820191016134ff565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613580576040519150601f19603f3d011682016040523d82523d6000602084013e613585565b606091505b50915091508161359482613995565b90612b475760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135e25781810151838201526020016135ca565b50505050905090810190601f16801561360f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6000613627612de9565b6001600160a01b0385166000908152602082905260409020549091508381111561365057600080fd5b600061366761365e86610ce5565b611f6386610ce5565b90506136766103768383611369565b6001600160a01b039096166000908152602093909352505060409020929092555050565b6000610a84826113e56301da9c00818861270789670de0b6b3a7640000611e7c565b60006136c6611e61565b61ffff8516600090815260209190915260409020805490915064ffffffffff1642146136f157600080fd5b8054600160f81b900460ff1661370657600080fd5b6001810154600090613721906001600160581b031685611369565b825490915060009061374390600160281b90046001600160581b031685611369565b9050816009191280156137565750600082125b1561376057600091505b806009191280156137715750600081125b1561377a575060005b613786612ad783610ba9565b6001840180546affffffffffffffffffffff19166001600160581b03929092169190911790556137b8612ad782610ba9565b83546001600160581b0391909116600160281b026fffffffffffffffffffffff0000000000199091161783556137f087878688613a9c565b6137f9836131f7565b50505050505050565b6000611ea3612d6584633b9aca00611e7c565b61381d613e68565b6000613827613bb0565b61ffff841660009081526020919091526040812054915061096d9082613bbd565b60008083608001511161385a57600080fd5b633b9aca0082111561386b57600080fd5b8251821161388a57825160408401516123ba91906113e5908590611e7c565b826020015182116138c85760408301518351602085015160608601516123ba93926138c292819003916113e591880390859003611e7c565b90612d3c565b611ea383606001516138c28560200151633b9aca00036113e5876060015188608001510388602001518803611e7c90919063ffffffff16565b60008061392060646113e58760e0015187611e7c90919063ffffffff16565b90508460a00151811015613935575060a08401515b8460c00151811115613948575060c08401515b821561395f576139588482612d3c565b9150613974565b83811161396e57808403613971565b60005b91505b509392505050565b6000611ea361398b8484611e7c565b633b9aca00611eaa565b60606044825110156139cb575060408051808201909152600d81526c14da5b195b9d0814995d995c9d609a1b6020820152610971565b60048201805190926024019060208110156139e557600080fd5b8101908080516040519392919084640100000000821115613a0557600080fd5b908301906020820185811115613a1a57600080fd5b8251640100000000811182820188101715613a3457600080fd5b82525081516020918201929091019080838360005b83811015613a61578181015183820152602001613a49565b50505050905090810190601f168015613a8e5780820380516001836020036101000a031916815260200191505b506040525050509050919050565b6000613aa6611444565b61ffff8516600090815260209190915260408120546001600160a01b03169150613ace613cdc565b61ffff8616600090815260209190915260409081902054905163ad1c095d60e01b81526001600160a01b039091169150819063ad1c095d90613b169089908790600401614435565b600060405180830381600087803b158015613b3057600080fd5b505af1158015613b44573d6000803e3d6000fd5b505060405163ad1c095d60e01b81526001600160a01b038516925063ad1c095d9150613b769089908890600401614435565b600060405180830381600087803b158015613b9057600080fd5b505af1158015613ba4573d6000803e3d6000fd5b50505050505050505050565b600080610a6a601b61144d565b613bc5613e68565b6064633b9aca008360ff861660208110613bdb57fe5b1a0281613be457fe5b0481526064633b9aca008360ff861660010160208110613c0057fe5b1a0281613c0957fe5b04816020018181525050613c2e8260028560ff160160208110613c2857fe5b1a613ce9565b60808201819052610100908360ff861660030160208110613c4b57fe5b1a0281613c5457fe5b0460408201526080810151610100908360ff861660040160208110613c7557fe5b1a0281613c7e57fe5b0460608201526207a1208260ff851660050160208110613c9a57fe5b1a0260a0820152622625a08260ff851660060160208110613cb757fe5b1a0260c08201528160ff841660070160208110613cd057fe5b1a60e082015292915050565b600080610a6a602261144d565b60008160ff16609610613d045760ff8216622625a002610a6a565b5060951960ff919091160162e4e1c00263165a0bc00190565b604051806101400160405280600061ffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001613d74613dae565b905290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60405180606001604052806000815260200160008152602001600081525090565b6040805160a0810182526000808252602082018190529181018290529060608201908152602001600081525090565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180602001604052806001906020820280368337509192915050565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8051610971816147e6565b600082601f830112613ec8578081fd5b81516020613edd613ed8836147c8565b6147a4565b8281528181019085830183850287018401881015613ef9578586fd5b855b85811015613f20578151613f0e816147e6565b84529284019290840190600101613efb565b5090979650505050505050565b6000601f8381840112613f3e578182fd5b82516020613f4e613ed8836147c8565b82815281810190868301865b85811015613ff357815189018a603f820112613f74578889fd5b8581015167ffffffffffffffff811115613f8a57fe5b613f9b818a01601f191688016147a4565b81815260408d81848601011115613fb0578b8cfd5b8b5b83811015613fcd578481018201518382018b01528901613fb2565b83811115613fdd578c8a85850101525b5050865250509284019290840190600101613f5a565b509098975050505050505050565b8051610971816147fe565b80516001600160701b03198116811461097157600080fd5b80516001600160f81b03198116811461097157600080fd5b80516109718161480c565b80356001600160581b038116811461097157600080fd5b805160ff8116811461097157600080fd5b600060208284031215614080578081fd5b8135611ea3816147e6565b60008060006060848603121561409f578182fd5b83356140aa816147e6565b925060208401356140ba8161480c565b929592945050506040919091013590565b6000806000606084860312156140df578081fd5b83356140ea816147e6565b925060208401356140fa8161480c565b915060408401356001600160601b0381168114614115578182fd5b809150509250925092565b60006020808385031215614132578182fd5b825167ffffffffffffffff80821115614149578384fd5b818501915085601f83011261415c578384fd5b815161416a613ed8826147c8565b81815284810190848601875b84811015614230578151870160a0818d03601f1901121561419557898afd5b6040805160a081018181108a821117156141ab57fe5b8252828b0151898111156141bd578c8dfd5b6141cb8f8d83870101613eb8565b82525081830151898111156141de578c8dfd5b6141ec8f8d83870101613f2d565b8c8301525060608301518282015261420660808401613ead565b606082015261421760a0840161405e565b6080820152865250509287019290870190600101614176565b50909998505050505050505050565b600060208284031215614250578081fd5b8135611ea3816147fe565b60006020828403121561426c578081fd5b5051919050565b600060c08284031215614284578081fd5b60405160c0810181811067ffffffffffffffff821117156142a157fe5b604052825164ffffffffff811681146142b8578283fd5b81526142c660208401614024565b60208201526142d76040840161405e565b60408201526142e86060840161403c565b60608201526142f96080840161400c565b608082015261430a60a08401614001565b60a08201529392505050565b600060208284031215614327578081fd5b8135611ea38161480c565b600080600080600060a08688031215614349578283fd5b85356143548161480c565b94506020860135614364816147e6565b93506040860135614374816147e6565b92506060860135614384816147e6565b915061439260808701614047565b90509295509295909350565b6000806000606084860312156143b2578081fd5b83356143bd8161480c565b92506143cb60208501614047565b91506040840135614115816147fe565b600080604083850312156143ed578182fd5b505080516020909101519092909150565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b03929092168252602082015260400190565b600060e08201905060018060a01b038416825264ffffffffff835116602083015260ff60f81b602084015116604083015260ff604084015116606083015261ffff60608401511660808301526001600160701b031960808401511660a083015260a0830151151560c08301529392505050565b6001600160a01b0393909316835261ffff919091166020830152604082015260600190565b6001600160a01b0395909516855261ffff93909316602085015260408401919091526060830152608082015260a00190565b901515815260200190565b90815260200190565b6020808252600f908201526e04f76657220537570706c792043617608c1b604082015260600190565b6020808252600b908201526a4554482042616c616e636560a81b604082015260600190565b60208082526012908201527143616e6e6f7420686176652061737365747360701b604082015260600190565b602080825260169082015275496e73756666696369656e7420616c6c6f77616e636560501b604082015260600190565b6020808252601390820152722ab730baba3437b934bd32b21031b0b63632b960691b604082015260600190565b6020808252600f908201526e4e6f205072696d6520426f72726f7760881b604082015260600190565b6020808252601c908201527f446570726563617465643a2052656465656d20746f2063546f6b656e00000000604082015260600190565b602080825260149082015273496e73756666696369656e742042616c616e636560601b604082015260600190565b602080825260149082015273043616e6e6f74206368616e6765206269746d61760641b604082015260600190565b60208082526010908201526f10d85b9b9bdd081a185d99481919589d60821b604082015260600190565b6020808252600a90820152692732b390372a37b5b2b760b11b604082015260600190565b602080825260139082015272125b9d985b1a590818dd5c9c995b98de481a59606a1b604082015260600190565b602080825260139082015272496e73756666696369656e7420746f6b656e7360681b604082015260600190565b6020808252600d908201526c04f76657220446562742043617609c1b604082015260600190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff811182821017156147c057fe5b604052919050565b600067ffffffffffffffff8211156147dc57fe5b5060209081020190565b6001600160a01b03811681146147fb57600080fd5b50565b80151581146147fb57600080fd5b61ffff811681146147fb57600080fdfea2646970667358221220b803374231486a4e6e49183195f793bfcee60ce0d8638f0d22457fd617d8030664736f6c63430007060033
0x608060405234801561001057600080fd5b50614852806100206000396000f3fe60806040526004361061009c5760003560e01c80638246336711610064578063824633671461014e5780638da5cb5b14610163578063912e33c7146101785780639c97945014610198578063c4c96dae146101b8578063f667f897146101dc5761009c565b806302f332e8146100a157806324a3d622146100d75780632890fb65146100f957806356a273dd1461010c57806361d0d61c1461012c575b600080fd5b3480156100ad57600080fd5b506100c16100bc36600461439e565b610209565b6040516100ce9190614523565b60405180910390f35b3480156100e357600080fd5b506100ec61038b565b6040516100ce91906143fe565b6100c161010736600461408b565b61039a565b34801561011857600080fd5b506100c16101273660046140cb565b61043e565b34801561013857600080fd5b5061014c61014736600461423f565b61061c565b005b34801561015a57600080fd5b506100ec610656565b34801561016f57600080fd5b506100ec610665565b34801561018457600080fd5b506100c1610193366004614332565b61067c565b3480156101a457600080fd5b5061014c6101b3366004614316565b6108b1565b3480156101c457600080fd5b506101cd6108fe565b6040516100ce93929190614412565b3480156101e857600080fd5b506101fc6101f736600461406f565b610942565b6040516100ce9190614518565b60006002600a54141561021b57600080fd5b6002600a5561ffff841660011461025257816102525760405162461bcd60e51b81526004016102499061462c565b60405180910390fd5b600061025d33610976565b509050610268613d1d565b61027481338885610a3b565b6001600160581b0385811614156102ad57600081602001511361029657600080fd5b6102a38160200151610a5c565b60808201526102c5565b6102bf856001600160581b0316610a5c565b60808201525b60006102d48233858815610a70565b90506102e08333610a8c565b60208301516001600160f81b0319161561035c57604051636ccc642f60e01b815273ea7aa69dbeea9deb4294109bd344f69c79c6fdf790636ccc642f9061032b9033906004016143fe565b60006040518083038186803b15801561034357600080fd5b505af4158015610357573d6000803e3d6000fd5b505050505b600081131561036a57600080fd5b61037b61037682610a5c565b610ba9565b6001600a55979650505050505050565b6002546001600160a01b031681565b60006002600a5414156103ac57600080fd5b6002600a55333014156103be57600080fd5b6103c784610bbc565b60006103d285610c37565b90506103dc613d1d565b6103e881878785610a3b565b6000610401336103f787610ce5565b8491906000610cfb565b90506000811361041057600080fd5b61041b828885610d4d565b6104258388610a8c565b6101208201516104359087610d6c565b61037b81610ba9565b60006002600a54141561045057600080fd5b6002600a55336001600160a01b038516148061046b57503330145b6104875760405162461bcd60e51b8152600401610249906145d6565b6001600160601b038216600061049c86610976565b5090506104a7613d1d565b6104b381888885610a3b565b82816040015112156104d75760405162461bcd60e51b81526004016102499061473a565b6104e083610a5c565b60c0820152604051630e22aaa360e01b815260009073ce3f1d83cecee26b1d4a7010123b86ced67a48d490630e22aaa390610523908b908b9089906004016144c1565b60206040518083038186803b15801561053b57600080fd5b505af415801561054f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610573919061425b565b606083018190529050610587828985610d4d565b6105918389610a8c565b60208301516001600160f81b0319161561037b57604051636ccc642f60e01b815273ea7aa69dbeea9deb4294109bd344f69c79c6fdf790636ccc642f906105dc908b906004016143fe565b60006040518083038186803b1580156105f457600080fd5b505af4158015610608573d6000803e3d6000fd5b505050506001600a55979650505050505050565b3330141561062957600080fd5b61063233610bbc565b600061063d33610976565b5082151560a082015290506106528133610a8c565b5050565b6001546001600160a01b031681565b60005464010000000090046001600160a01b031681565b60006002600a54141561068e57600080fd5b6002600a55600061069e87610daf565b9050336001600160a01b038216146106b557600080fd5b6106be86610bbc565b836001600160a01b0316866001600160a01b0316146107865760006106e1610ddc565b6001600160a01b03808916600090815260209283526040808220928916825291835281812061ffff8c16825290925290205490506001600160581b03841681101561073e5760405162461bcd60e51b8152600401610249906145a6565b836001600160581b03168103610752610ddc565b6001600160a01b03808a16600090815260209283526040808220928a16825291835281812061ffff8d168252909252902055505b600061079187610976565b50905061079c613d1d565b6107a881898b85610a3b565b8060200151856001600160581b031613156107d55760405162461bcd60e51b815260040161024990614663565b6107e7856001600160581b0316610a5c565b608082015260006107fc828a8a866001610de9565b9050610808838a610a8c565b60208301516001600160f81b0319161561088457604051636ccc642f60e01b815273ea7aa69dbeea9deb4294109bd344f69c79c6fdf790636ccc642f90610853908c906004016143fe565b60006040518083038186803b15801561086b57600080fd5b505af415801561087f573d6000803e3d6000fd5b505050505b600081131561089257600080fd5b61089e61037682610a5c565b6001600a559a9950505050505050505050565b333014156108be57600080fd5b60005461ffff90811690821611156108d557600080fd5b3360006108e182610976565b5090506108ef818442610e06565b6108f98183610a8c565b505050565b73ea7aa69dbeea9deb4294109bd344f69c79c6fdf773e10836ba543be91e978fc9b455bf483572a44b2173ce3f1d83cecee26b1d4a7010123b86ced67a48d4909192565b600061094d82610bbc565b60008061095984610976565b91509150801561096d5761096d8285610a8c565b9150505b919050565b61097e613d79565b60008061098a84610c37565b905061099581610efe565b15610a2f576040516337b5fc2160e11b815273e10836ba543be91e978fc9b455bf483572a44b2190636f6bf842906109d3908790859060040161444e565b60c06040518083038186803b1580156109eb57600080fd5b505af41580156109ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a239190614273565b60019250925050610a36565b9150600090505b915091565b610a4482610f52565b610120850152610a5684848484610f64565b50505050565b6000610a6a6000198361100c565b92915050565b6000610a818585868686600161105a565b90505b949350505050565b6000610a96611231565b6001600160a01b03831660008181526020838152604080832088518154938a01518a84015160608c015160808d015160a08e015164ffffffffff1990981664ffffffffff9095169490941765ff00000000001916600160281b60f89490941c939093029290921766ff0000000000001916600160301b60ff909216919091021768ffff000000000000001916600160381b61ffff90921691909102177affffffffffffffffffffffffffffffffffff0000000000000000001916600160481b60709290921c919091021760ff60d81b1916600160d81b93151593909302929092179091555192935090917f6bd4b121bca854a191536a2ca891155c42ee2fb23f307fb34e8bc65cfcb5412e9190a2505050565b600080821215610bb857600080fd5b5090565b6001600160a01b038116610bcf57600080fd5b6001600160a01b038116610fee1415610be757600080fd5b6001600160a01b0381166105e71415610bff57600080fd5b6001600160a01b038116301415610c1557600080fd5b6000610c208261123e565b5050505061ffff1690508060001461065257600080fd5b610c3f613d79565b6000610c49611231565b6001600160a01b03841660009081526020918252604090819020815160c081018352905464ffffffffff811682526001600160f81b0319600160281b820460f81b169382019390935260ff600160301b840481169282019290925261ffff600160381b84041660608201526001600160701b0319600160481b840460701b166080820152600160d81b90920416151560a0820152915050919050565b60006001600160ff1b03821115610bb857600080fd5b600082610d0a57506000610a84565b60008313610d1757600080fd5b610d2d84866000015185886101200151866112a7565b6060870151909250610d40915082611369565b6060860152949350505050565b608083015115610d5c57600080fd5b610a56838384846000600161105a565b600080610d79848461137f565b5050915091508160001415610d8f575050610652565b81811115610a565760405162461bcd60e51b81526004016102499061452c565b6000610db9611444565b61ffff90921660009081526020929092525060409020546001600160a01b031690565b600080610a6a602361144d565b6000610dfa8686868686600161105a565b90505b95945050505050565b610e0f83611466565b15610e2c5760405162461bcd60e51b815260040161024990614691565b8161ffff166000108015610e465750613fff61ffff831611155b610e625760405162461bcd60e51b81526004016102499061470d565b604083015160ff1615610e875760405162461bcd60e51b81526004016102499061457a565b60208301516001600160f81b03191615610eb35760405162461bcd60e51b8152600401610249906146bf565b610ec88361ffff84166000600160fe1b611473565b61ffff821660608401526000610edd82611672565b905064ffffffffff8110610ef057600080fd5b64ffffffffff169092525050565b600042610f0a83611466565b15610f2b57610f1881611672565b835164ffffffffff161091506109719050565b825164ffffffffff1615801590610f4a5750825164ffffffffff168110155b915050610971565b610f5a613dae565b610a6a8242611690565b8161ffff166000108015610f7e5750613fff61ffff831611155b610f8757600080fd5b61ffff8216808552610f9a908290611751565b15610fc957610faf83838661012001516117db565b61010088015260e087015260408601526020850152610fe7565b6000602085018190526040850181905260e085018190526101008501525b50506000606083018190526080830181905260a0830181905260c09092019190915250565b81810260001983141561103c5781158061102e57508282828161102b57fe5b05145b61103757600080fd5b610a6a565b82158061105157508183828161104e57fe5b05145b610a6a57600080fd5b600080600061107a88888b600001518c608001518d61012001518a611895565b925060006110998a608001518b6060015161136990919063ffffffff16565b90508480156110a85750600081125b80156110c3575060208a01516000906110c19083611369565b125b156110ee578660a001516110e95760405162461bcd60e51b815260040161024990614603565b600191505b801561110d5760208a01516111039082611369565b60208b0152600192505b5060a0890151151580611123575060c089015115155b1561118c5760006111538a60c0015161114d8c60a001518d6040015161136990919063ffffffff16565b90611369565b905060008112156111765760405162461bcd60e51b8152600401610249906146e9565b6111818a8a8361193f565b5060408a0152600191505b81156111bb576111bb888a600001518b602001518c604001518d60e001518e61010001518f6101200151611a36565b885160208a01516111e89161ffff16901515806111db575060408b015115155b889190600160fe1b611473565b60008960200151121561120e57602086018051600160f91b176001600160f81b03191690525b80156112255788516101208a015161122591611b71565b50509695505050505050565b600080610a6a600161144d565b60008060008060008061124f611bb4565b6001600160a01b039097166000908152602097909752505060409094205461ffff81169563ffffffff62010000830481169650600160301b830416945060ff600160501b8304169350600160581b90910460d01b9150565b60008060006112b586610ba9565b9050806112c957600080925092505061135f565b60006112d88861ffff16611bc1565b90506003816060015160058111156112ec57fe5b1415611333573482101561130c576113078983340387611bd4565b61132b565b34821461132b5760405162461bcd60e51b815260040161024990614555565b86935061134d565b61134a61134582600001518b85611c9c565b610ce5565b93505b61135a898986848a611e1a565b925050505b9550959350505050565b81810182811215600083121514610a6a57600080fd5b600080600080600061138f611e61565b61ffff871660009081526020919091526040902060018101549091506113c190600160581b900463ffffffff16611e6e565b60018201549095506113eb906064906113e5908890600160781b900460ff16611e7c565b90611eaa565b8154909350600160281b90046001600160581b031661140d6103768983611ec9565b60018301549095506001600160581b03166000036114366103766114318b84611f18565b610a5c565b935050505092959194509250565b600080610a6a60215b6000620f424082602681111561145f57fe5b0192915050565b6060015161ffff16151590565b8260001080156114855750613fff8311155b61148e57600080fd5b8180156114a2575082846060015161ffff16145b156114ac57610a56565b6080840151600090815b6001600160701b03198216156116275760f082901c613fff1686811480156114db5750855b1561151357506080870180516001600160f01b0319861660109093029290921c919091176001600160701b031916905250610a569050565b8681148015611520575085155b15611575576001600160f01b03198516199290921691600360fe1b8316611553576010836001600160701b031916901b92505b506001600160701b031991821660109091021c91909117166080850152610a56565b86811180156115815750855b156115db576080888101516001600160f01b031960f08a901b88178116601086021c9690961795911b16156115b557600080fd5b506001600160701b03199182166001919091016010021c91909117166080850152610a56565b86811180156115e8575085155b156115f65750505050610a56565b506001600160f01b0319821660108281029190911c93909317929190911b6001600160801b031916906001016114b6565b8461163457505050610a56565b6009811061164157600080fd5b6001600160f01b031960f087901b85171660109091021c919091176001600160701b03191660808601525050505050565b60006201518082101561168457600080fd5b50620151808106900390565b611698613dae565b60006116a384611f69565b905082816000015110156116e2576000806116bd86612031565b90506116cb868483886120ae565b90935091506116db868385612152565b50506116ef565b805183146116ef57600080fd5b60405180606001604052806117186113458460a001518560c00151611e7c90919063ffffffff16565b815260200161173b6113458460a001518560e00151611e7c90919063ffffffff16565b8152602001826060015181525091505092915050565b600081158015906117645750613fff8211155b61176d57600080fd5b6080830151606084015161ffff1683141561178c576001915050610a6a565b6001600160701b03198116156117d15760f081901c613fff16838114156117be5750600160fe1b908116149050610a6a565b5060101b6001600160801b03191661178c565b5060009392505050565b60008060008060006117eb612386565b6001600160a01b03891660009081526020828152604080832061ffff8c168452909152902080546001600160501b0381169650600160501b900463ffffffff169450909150831561185857805461185190600160701b900466ffffffffffffff16611e6e565b925061186d565b8054600160701b900466ffffffffffffff1692505b8054611888908890600160a81b9004600a90810b900b612393565b9550505093509350935093565b6000836118a457506000611935565b600084126118b157600080fd5b60006118c08661ffff16611bc1565b90506118d5816118d08688611ec9565b6123c1565b915060006118e283610a5c565b90506118ef8783836123f9565b60038260600151600581111561190157fe5b141561191757611912888286611bd4565b611924565b81516119249089836124ef565b6119318988858589611e1a565b5050505b9695505050505050565b8251600090429082906119559061ffff16612566565b905060006119628261258c565b505090506000611977838960c00151866125e8565b9050611985888483896126cb565b9450600061199284612744565b90506001600160a01b03811615611a1a57806001600160a01b0316633f3ef50d898b600001516119c58d60400151610ba9565b8b886040518663ffffffff1660e01b81526004016119e79594939291906144e6565b600060405180830381600087803b158015611a0157600080fd5b505af1158015611a15573d6000803e3d6000fd5b505050505b8515611a2a57611a2a88876127b6565b50505050509392505050565b6000611a40612386565b6001600160a01b03891660009081526020828152604080832061ffff8c168452909152902090915084611aa85766ffffffffffffff841115611a8157600080fd5b805466ffffffffffffff60701b1916600160701b66ffffffffffffff861602178155611ac2565b8054600160501b900463ffffffff168514611ac257600080fd5b611acb856127d5565b815463ffffffff91909116600160501b0263ffffffff60501b19909116178155611afc611af787610ba9565b6127e8565b815469ffffffffffffffffffff19166001600160501b039190911617808255611b4290611b3d9085908c908c90600160a81b9004600a90810b900b8c6127fe565b612821565b8154600a9190910b6001600160581b0316600160a81b026001600160a81b039091161790555050505050505050565b600080611b7e848461137f565b9350935050508160001415611b94575050610652565b81811115610a565760405162461bcd60e51b815260040161024990614767565b600080610a6a600261144d565b611bc9613dcf565b610a6a826001612853565b8015611c665773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611c2957600080fd5b505af1158015611c3d573d6000803e3d6000fd5b5050505050611c6173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc284846124ef565b6108f9565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015610a56573d6000803e3d6000fd5b600080846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611cec57600080fd5b505afa158015611d00573d6000803e3d6000fd5b505050506040513d6020811015611d1657600080fd5b5051604080516323b872dd60e01b81526001600160a01b038781166004830152306024830152604482018790529151929350908716916323b872dd9160648082019260009290919082900301818387803b158015611d7357600080fd5b505af1158015611d87573d6000803e3d6000fd5b50505050611d936128ed565b6000856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611de257600080fd5b505afa158015611df6573d6000803e3d6000fd5b505050506040513d6020811015611e0c57600080fd5b50519050611935818361295a565b600080611e27848661296f565b9050611e33838261299f565b9150611e408787846129c3565b611e4b868383612a43565b8351611e579086612b4f565b5095945050505050565b600080610a6a601d61144d565b600881901c60ff9091161b90565b600082611e8b57506000610a6a565b82820282848281611e9857fe5b0414611ea357600080fd5b9392505050565b6000808211611eb857600080fd5b818381611ec157fe5b049392505050565b600080611efc6ec097ce7bc90715b34b9f1000000000611ef686600001518661100c90919063ffffffff16565b90612ba4565b905060008312611f0c5780610a84565b610a8481600019612bd5565b600060018212611f2757600080fd5b81611f3457506000610a6a565b611ea36001611f636ec097ce7bc90715b34b9f1000000000611ef687602001518761100c90919063ffffffff16565b90612beb565b611f71613dfe565b6000611f7b611e61565b61ffff93841660009081526020918252604090819020805464ffffffffff81168652600160281b81046001600160581b03908116948701949094526001820154841692860192909252600160d81b820463ffffffff166060860152600160801b9091049091166080840152600201546001600160501b0380821660a0850152600160501b8204811660c0850152600160a01b82041660e0840152600160f01b900460ff1661012c02909216610100820152919050565b60008061203d83612c01565b6001600160a01b031663ef81f2166040518163ffffffff1660e01b81526004016040805180830381600087803b15801561207657600080fd5b505af115801561208a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8491906143db565b6120b6613dfe565b60008060006120c6888689612c31565b60c08b019290925260e08a0192909252602089015191935091506120ea9083612d3c565b60208801526080870151600090156121185760808801516121159061210f898261295a565b90612d4e565b90505b61213861212d670de0b6b3a764000083612d3c565b60a08a015190612d6b565b60a089015250506080860194909452505082529092909150565b600061215c611e61565b60008561ffff16815260200190815260200160002090506121808260000151612d88565b815464ffffffffff191664ffffffffff9190911617815560a08201516121a5906127e8565b60028201805469ffffffffffffffffffff19166001600160501b039290921691909117905560c08201516121d8906127e8565b81600201600a6101000a8154816001600160501b0302191690836001600160501b0316021790555061220d8260e001516127e8565b8160020160146101000a8154816001600160501b0302191690836001600160501b031602179055506122428260200151612d9c565b81546001600160581b0391909116600160281b026fffffffffffffffffffffff000000000019909116178155604082015161227c90612d9c565b6001820180546affffffffffffffffffffff19166001600160581b039290921691909117905560808201516122b090612d9c565b81546001600160581b0391909116600160801b026affffffffffffffffffffff60801b1990911617815560608201516122e8906127d5565b815463ffffffff91909116600160d81b0263ffffffff60d81b19909116178155821561233457600061231984610ce5565b90506123258582612db2565b612332610fee86836129c3565b505b8361ffff167fef25641e225e493886510ca1ad6584fa7b442b9fea820a29d1de3ce27d270fd28360a001518460c001518560e001516040516123789392919061478e565b60405180910390a250505050565b600080610a6a600661144d565b60008082126123a3575080610a6a565b825160208401516123ba9190611ef690859061100c565b9050610a6a565b60006305f5e100836040015114156123da575080610a6a565b611ea36305f5e100611ef685604001518561100c90919063ffffffff16565b6000612403612de9565b83516001600160a01b031660009081526020829052604090205490915080831161242e5750506108f9565b600061243986612c01565b90506000816001600160a01b031663b5e4da238487036040518263ffffffff1660e01b815260040161246b9190614523565b60006040518083038186803b15801561248357600080fd5b505afa158015612497573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124bf9190810190614120565b905060006124cd8783612df6565b90506124d98482612d3c565b8611156124e557600080fd5b5050505050505050565b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561254657600080fd5b505af115801561255a573d6000803e3d6000fd5b505050506108f96128ed565b600080612571613039565b6000938452602052505060409020546001600160a01b031690565b60008060008061259a613046565b6001600160a01b0395909516600090815260209590955250506040909220546001600160601b03811693600160601b82046001600160801b03169350600160e01b90910463ffffffff169150565b60008060006125f78685613053565b50915091506000612606613046565b6001600160a01b038816600090815260208290526040812091925061262b8589611369565b90508060001315801561264457506001600160601b0381105b61264d57600080fd5b81546bffffffffffffffffffffffff19166001600160601b038216176fffffffffffffffffffffffffffffffff60601b1916600160601b6001600160801b0386160217825563ffffffff87106126a257600080fd5b50805463ffffffff8716600160e01b026001600160e01b03909116179055509150509392505050565b60008460e001516000146126de57600080fd5b61271a61271386610100015161270d670de0b6b3a76400006113e5886127078c60400151610ba9565b90611e7c565b9061295a565b8290612d3c565b9050612732670de0b6b3a76400006113e58486611e7c565b85610100018181525050949350505050565b60008061274f611bb4565b6001600160a01b0384166000908152602082905260409020805491925090600160f81b900460ff16156127ab576127846130e9565b6001600160a01b038086166000908152602092909252604090912054169250610971915050565b600092505050610971565b61065273cfeaead4947f0705a14ec42ac3d44129e1ef3ed583836124ef565b600063ffffffff821115610bb857600080fd5b60006001600160501b03821115610bb857600080fd5b600061280a86836130f6565b9050610dfd86868661281c878661312f565b6131b6565b60006a7fffffffffffffffffffff19821280159061284a57506a7fffffffffffffffffffff8213155b610bb857600080fd5b61285b613dcf565b60006128656131ea565b6000858152602082815260408083208715158452825291829020825160a08101845281546001600160a01b038116825260ff600160a01b82048116151594830194909452600160b01b81048416600a0a9482019490945293945092916060830191600160a81b9091041660058111156128da57fe5b8152600060209091015295945050505050565b60006128f7613e4a565b3d801561290b576020811461291457600080fd5b6001925061291f565b60206000833e815192505b5081610652576040805162461bcd60e51b8152602060048201526005602482015264045524332360dc1b604482015290519081900360640190fd5b60008282111561296957600080fd5b50900390565b60006305f5e10083604001511415612988575080610a6a565b6040830151611ea390611ef6846305f5e10061100c565b81516000908190611efc90611ef6856ec097ce7bc90715b34b9f100000000061100c565b60006129cd611444565b61ffff8416600090815260209190915260409081902054905163ad1c095d60e01b81526001600160a01b039091169150819063ad1c095d90612a159087908690600401614435565b600060405180830381600087803b158015612a2f57600080fd5b505af11580156124e5573d6000803e3d6000fd5b6000612a4d611e61565b61ffff8516600090815260209190915260409020805490915064ffffffffff164214612a7857600080fd5b8054600090612a9790600160281b90046001600160581b031685611369565b8254909150600090612ab990600160801b90046001600160581b031685611369565b905080624c4b401315612acb57600080fd5b612adc612ad782610ba9565b612d9c565b83546001600160581b0391909116600160801b026affffffffffffffffffffff60801b19909116178355612b12612ad783610ba9565b83546001600160581b0391909116600160281b026fffffffffffffffffffffff000000000019909116178355612b47836131f7565b505050505050565b6000612b59612de9565b6001600160a01b038416600090815260208290526040902054909150612b826103768285611369565b6001600160a01b03909416600090815260209290925250604090209190915550565b600081600019148015612bba5750600160ff1b83145b15612bc457600080fd5b818381612bcd57fe5b059392505050565b6000818312612be45781611ea3565b5090919050565b80820382811315600083121514610a6a57600080fd5b600080612c0c6132c2565b61ffff939093166000908152602093909352505060409020546001600160a01b031690565b600080600080600080612c4489886132cf565b89519095509193509150600090612c6b90612c60908b9061295a565b633b9aca0090611e7c565b9050612ca5612c9a6301da9c00612c828585611e7c565b81612c8957fe5b670de0b6b3a7640000919004612d3c565b60e08a015190612d6b565b9650612cc7612cbc6301da9c00612c828785611e7c565b60c08a015190612d6b565b955081831415612cde575060009350612d33915050565b6000612d00612cf56301da9c00612c828786611e7c565b60e08b015190612d6b565b90506000612d0e898361295a565b9050612d2b886113e5838d60400151611e7c90919063ffffffff16565b965050505050505b93509350935093565b600082820183811015611ea357600080fd5b6000611ea3612d6584670de0b6b3a7640000611e7c565b83611eaa565b6000611ea3612d7a8484611e7c565b670de0b6b3a7640000611eaa565b600064ffffffffff821115610bb857600080fd5b60006001600160581b03821115610bb857600080fd5b6000811215612dc057600080fd5b6000612dce610fee84613369565b9050612dda8183611369565b90506108f9610fee84836133c2565b600080610a6a602661144d565b6000805b8251811015613032576000838281518110612e1157fe5b60200260200101519050600081606001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612e4d91906143fe565b60206040518083038186803b158015612e6557600080fd5b505afa158015612e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9d919061425b565b90506000612eab8730613436565b905060005b835151811015612efc57612ef484600001518281518110612ecd57fe5b6020026020010151600086602001518481518110612ee757fe5b60200260200101516134e0565b600101612eb0565b506000612f098830613436565b90506000612f17828461295a565b90508085604001511115612f2a57600080fd5b60608501516040516370a0823160e01b81526000916001600160a01b0316906370a0823190612f5d9030906004016143fe565b60206040518083038186803b158015612f7557600080fd5b505afa158015612f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fad919061425b565b905084811115612fbc57600080fd5b608086015160ff1615801590612fdb5750612fd7858261295a565b8214155b15612ff6576080860151612ff390829060ff16612d3c565b90505b6130058660600151868361361d565b61300f8883612d3c565b97506130208a60000151858561361d565b505060019094019350612dfa92505050565b5092915050565b600080610a6a600361144d565b600080610a6a601161144d565b60008060006130618561258c565b9194509250905080841180156130775750600081115b80156130835750600083115b156130e25760006130938661123e565b50505091505060006130be6130b56305f5e10084611e7c90919063ffffffff16565b8488038761369a565b90506130ca8482612d3c565b93506001600160801b0384106130df57600080fd5b50505b9250925092565b600080610a6a601261144d565b600080821215613129576131246001611f638560200151611ef687600001518761100c90919063ffffffff16565b611ea3565b50919050565b60008183148061314c57506000831215801561314c575060008212155b1561315957506000610a6a565b6000831315801561316a5750816000125b15613176575081610a6a565b600082131580156131875750826000125b15613195576123ba82610a5c565b600083131580156131a7575060008213155b1561009c576123ba8383612beb565b8015610a5657835160208501516000916131d591611ef690859061100c565b90506131e3848484846136bc565b5050505050565b600080610a6a600761144d565b8054600282015460009161323991600160281b9091046001600160581b031690613233906001600160501b03600160501b82048116911661100c565b9061100c565b60018301546002840154919250600091613273916001600160581b031690613233906001600160501b03600160a01b82048116911661100c565b83549091506000906132aa9060016001600160581b03600160801b909204821601166ec097ce7bc90715b34b9f100000000061100c565b9050806132b78484612beb565b1315610a5657600080fd5b600080610a6a601f61144d565b60008060008060008560200151111561331c576133196133008660c001518760200151611e7c90919063ffffffff16565b60e0870151604088015161331391611e7c565b90613802565b90505b600061332787613815565b90506133338183613848565b9450811561334a5761334781866001613901565b93505b6020860151156130df5761335e858361397c565b925050509250925092565b600080613374612386565b6001600160a01b03851660009081526020828152604080832061ffff8816845290915281208054600160a81b9004600a90810b900b94509192508312156133ba57600080fd5b505092915050565b60008112156133d057600080fd5b60006133da612386565b6001600160a01b03851660009081526020828152604080832061ffff88168452909152902090915061340b83612821565b8154600a9190910b6001600160581b0316600160a81b026001600160a81b0390911617905550505050565b600060038360600151600581111561344a57fe5b141561346157506001600160a01b03811631610a6a565b82516040516370a0823160e01b81526001600160a01b03909116906370a08231906134909085906004016143fe565b60206040518083038186803b1580156134a857600080fd5b505afa1580156134bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ba919061425b565b600080846001600160a01b031684846040518082805190602001908083835b6020831061351e5780518252601f1990920191602091820191016134ff565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613580576040519150601f19603f3d011682016040523d82523d6000602084013e613585565b606091505b50915091508161359482613995565b90612b475760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135e25781810151838201526020016135ca565b50505050905090810190601f16801561360f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6000613627612de9565b6001600160a01b0385166000908152602082905260409020549091508381111561365057600080fd5b600061366761365e86610ce5565b611f6386610ce5565b90506136766103768383611369565b6001600160a01b039096166000908152602093909352505060409020929092555050565b6000610a84826113e56301da9c00818861270789670de0b6b3a7640000611e7c565b60006136c6611e61565b61ffff8516600090815260209190915260409020805490915064ffffffffff1642146136f157600080fd5b8054600160f81b900460ff1661370657600080fd5b6001810154600090613721906001600160581b031685611369565b825490915060009061374390600160281b90046001600160581b031685611369565b9050816009191280156137565750600082125b1561376057600091505b806009191280156137715750600081125b1561377a575060005b613786612ad783610ba9565b6001840180546affffffffffffffffffffff19166001600160581b03929092169190911790556137b8612ad782610ba9565b83546001600160581b0391909116600160281b026fffffffffffffffffffffff0000000000199091161783556137f087878688613a9c565b6137f9836131f7565b50505050505050565b6000611ea3612d6584633b9aca00611e7c565b61381d613e68565b6000613827613bb0565b61ffff841660009081526020919091526040812054915061096d9082613bbd565b60008083608001511161385a57600080fd5b633b9aca0082111561386b57600080fd5b8251821161388a57825160408401516123ba91906113e5908590611e7c565b826020015182116138c85760408301518351602085015160608601516123ba93926138c292819003916113e591880390859003611e7c565b90612d3c565b611ea383606001516138c28560200151633b9aca00036113e5876060015188608001510388602001518803611e7c90919063ffffffff16565b60008061392060646113e58760e0015187611e7c90919063ffffffff16565b90508460a00151811015613935575060a08401515b8460c00151811115613948575060c08401515b821561395f576139588482612d3c565b9150613974565b83811161396e57808403613971565b60005b91505b509392505050565b6000611ea361398b8484611e7c565b633b9aca00611eaa565b60606044825110156139cb575060408051808201909152600d81526c14da5b195b9d0814995d995c9d609a1b6020820152610971565b60048201805190926024019060208110156139e557600080fd5b8101908080516040519392919084640100000000821115613a0557600080fd5b908301906020820185811115613a1a57600080fd5b8251640100000000811182820188101715613a3457600080fd5b82525081516020918201929091019080838360005b83811015613a61578181015183820152602001613a49565b50505050905090810190601f168015613a8e5780820380516001836020036101000a031916815260200191505b506040525050509050919050565b6000613aa6611444565b61ffff8516600090815260209190915260408120546001600160a01b03169150613ace613cdc565b61ffff8616600090815260209190915260409081902054905163ad1c095d60e01b81526001600160a01b039091169150819063ad1c095d90613b169089908790600401614435565b600060405180830381600087803b158015613b3057600080fd5b505af1158015613b44573d6000803e3d6000fd5b505060405163ad1c095d60e01b81526001600160a01b038516925063ad1c095d9150613b769089908890600401614435565b600060405180830381600087803b158015613b9057600080fd5b505af1158015613ba4573d6000803e3d6000fd5b50505050505050505050565b600080610a6a601b61144d565b613bc5613e68565b6064633b9aca008360ff861660208110613bdb57fe5b1a0281613be457fe5b0481526064633b9aca008360ff861660010160208110613c0057fe5b1a0281613c0957fe5b04816020018181525050613c2e8260028560ff160160208110613c2857fe5b1a613ce9565b60808201819052610100908360ff861660030160208110613c4b57fe5b1a0281613c5457fe5b0460408201526080810151610100908360ff861660040160208110613c7557fe5b1a0281613c7e57fe5b0460608201526207a1208260ff851660050160208110613c9a57fe5b1a0260a0820152622625a08260ff851660060160208110613cb757fe5b1a0260c08201528160ff841660070160208110613cd057fe5b1a60e082015292915050565b600080610a6a602261144d565b60008160ff16609610613d045760ff8216622625a002610a6a565b5060951960ff919091160162e4e1c00263165a0bc00190565b604051806101400160405280600061ffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001613d74613dae565b905290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60405180606001604052806000815260200160008152602001600081525090565b6040805160a0810182526000808252602082018190529181018290529060608201908152602001600081525090565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180602001604052806001906020820280368337509192915050565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8051610971816147e6565b600082601f830112613ec8578081fd5b81516020613edd613ed8836147c8565b6147a4565b8281528181019085830183850287018401881015613ef9578586fd5b855b85811015613f20578151613f0e816147e6565b84529284019290840190600101613efb565b5090979650505050505050565b6000601f8381840112613f3e578182fd5b82516020613f4e613ed8836147c8565b82815281810190868301865b85811015613ff357815189018a603f820112613f74578889fd5b8581015167ffffffffffffffff811115613f8a57fe5b613f9b818a01601f191688016147a4565b81815260408d81848601011115613fb0578b8cfd5b8b5b83811015613fcd578481018201518382018b01528901613fb2565b83811115613fdd578c8a85850101525b5050865250509284019290840190600101613f5a565b509098975050505050505050565b8051610971816147fe565b80516001600160701b03198116811461097157600080fd5b80516001600160f81b03198116811461097157600080fd5b80516109718161480c565b80356001600160581b038116811461097157600080fd5b805160ff8116811461097157600080fd5b600060208284031215614080578081fd5b8135611ea3816147e6565b60008060006060848603121561409f578182fd5b83356140aa816147e6565b925060208401356140ba8161480c565b929592945050506040919091013590565b6000806000606084860312156140df578081fd5b83356140ea816147e6565b925060208401356140fa8161480c565b915060408401356001600160601b0381168114614115578182fd5b809150509250925092565b60006020808385031215614132578182fd5b825167ffffffffffffffff80821115614149578384fd5b818501915085601f83011261415c578384fd5b815161416a613ed8826147c8565b81815284810190848601875b84811015614230578151870160a0818d03601f1901121561419557898afd5b6040805160a081018181108a821117156141ab57fe5b8252828b0151898111156141bd578c8dfd5b6141cb8f8d83870101613eb8565b82525081830151898111156141de578c8dfd5b6141ec8f8d83870101613f2d565b8c8301525060608301518282015261420660808401613ead565b606082015261421760a0840161405e565b6080820152865250509287019290870190600101614176565b50909998505050505050505050565b600060208284031215614250578081fd5b8135611ea3816147fe565b60006020828403121561426c578081fd5b5051919050565b600060c08284031215614284578081fd5b60405160c0810181811067ffffffffffffffff821117156142a157fe5b604052825164ffffffffff811681146142b8578283fd5b81526142c660208401614024565b60208201526142d76040840161405e565b60408201526142e86060840161403c565b60608201526142f96080840161400c565b608082015261430a60a08401614001565b60a08201529392505050565b600060208284031215614327578081fd5b8135611ea38161480c565b600080600080600060a08688031215614349578283fd5b85356143548161480c565b94506020860135614364816147e6565b93506040860135614374816147e6565b92506060860135614384816147e6565b915061439260808701614047565b90509295509295909350565b6000806000606084860312156143b2578081fd5b83356143bd8161480c565b92506143cb60208501614047565b91506040840135614115816147fe565b600080604083850312156143ed578182fd5b505080516020909101519092909150565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b03929092168252602082015260400190565b600060e08201905060018060a01b038416825264ffffffffff835116602083015260ff60f81b602084015116604083015260ff604084015116606083015261ffff60608401511660808301526001600160701b031960808401511660a083015260a0830151151560c08301529392505050565b6001600160a01b0393909316835261ffff919091166020830152604082015260600190565b6001600160a01b0395909516855261ffff93909316602085015260408401919091526060830152608082015260a00190565b901515815260200190565b90815260200190565b6020808252600f908201526e04f76657220537570706c792043617608c1b604082015260600190565b6020808252600b908201526a4554482042616c616e636560a81b604082015260600190565b60208082526012908201527143616e6e6f7420686176652061737365747360701b604082015260600190565b602080825260169082015275496e73756666696369656e7420616c6c6f77616e636560501b604082015260600190565b6020808252601390820152722ab730baba3437b934bd32b21031b0b63632b960691b604082015260600190565b6020808252600f908201526e4e6f205072696d6520426f72726f7760881b604082015260600190565b6020808252601c908201527f446570726563617465643a2052656465656d20746f2063546f6b656e00000000604082015260600190565b602080825260149082015273496e73756666696369656e742042616c616e636560601b604082015260600190565b602080825260149082015273043616e6e6f74206368616e6765206269746d61760641b604082015260600190565b60208082526010908201526f10d85b9b9bdd081a185d99481919589d60821b604082015260600190565b6020808252600a90820152692732b390372a37b5b2b760b11b604082015260600190565b602080825260139082015272125b9d985b1a590818dd5c9c995b98de481a59606a1b604082015260600190565b602080825260139082015272496e73756666696369656e7420746f6b656e7360681b604082015260600190565b6020808252600d908201526c04f76657220446562742043617609c1b604082015260600190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff811182821017156147c057fe5b604052919050565b600067ffffffffffffffff8211156147dc57fe5b5060209081020190565b6001600160a01b03811681146147fb57600080fd5b50565b80151581146147fb57600080fd5b61ffff811681146147fb57600080fdfea2646970667358221220b803374231486a4e6e49183195f793bfcee60ce0d8638f0d22457fd617d8030664736f6c63430007060033