0x608060405234801561001057600080fd5b50613065806100206000396000f3fe60806040526004361061026e5760003560e01c806370a0823111610153578063a7b7b087116100cb578063d547741f1161007f578063f1b2d6a311610064578063f1b2d6a3146108b8578063f2fde38b146108cd578063f61caf63146108ed57600080fd5b8063d547741f14610870578063ef8ef56f1461089057600080fd5b8063bf2d9e0b116100b0578063bf2d9e0b14610827578063c4d66de81461083d578063cce7ec131461085d57600080fd5b8063a7b7b087146107e7578063abaef99b1461080757600080fd5b80638da5cb5b1161012257806392e0d21d1161010757806392e0d21d1461077d578063a217fddf146107bd578063a32e3601146107d257600080fd5b80638da5cb5b146106c157806391d148541461070b57600080fd5b806370a082311461061c578063715018a61461065f5780637ca561ef146106745780638462151c1461069457600080fd5b806347ccca02116101e6578063592e0e00116101b55780636605ff661161019a5780636605ff66146105ca5780636817c76c146105df5780636cc0a25c146105f457600080fd5b8063592e0e00146105675780636352211e1461058757600080fd5b806347ccca02146104b65780634d59b64f146104e35780634eeb2e90146105295780634fb30d8b1461055157600080fd5b806318160ddd1161023d5780632f2ff15d116102225780632f2ff15d1461042957806336568abe14610449578063380d42441461046957600080fd5b806318160ddd146103c5578063248a9ca3146103da57600080fd5b806301ffc9a7146102a657806310312ace146102db578063107a274a1461032f578063150b7a021461034f57600080fd5b366102a15760405133903480156108fc02916000818181858888f1935050505015801561029f573d6000803e3d6000fd5b005b600080fd5b3480156102b257600080fd5b506102c66102c1366004612b43565b61090d565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506103216102f6366004612ba7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090206002015490565b6040519081526020016102d2565b34801561033b57600080fd5b5061032161034a366004612bc4565b6109a6565b34801561035b57600080fd5b5061039461036a366004612bdd565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016102d2565b3480156103d157600080fd5b50610321610a42565b3480156103e657600080fd5b506103216103f5366004612bc4565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b34801561043557600080fd5b5061029f610444366004612c7c565b610ada565b34801561045557600080fd5b5061029f610464366004612c7c565b610b24565b34801561047557600080fd5b5061049173907adc46bfbb50e974c42110860cc42fafa27cfa81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b3480156104c257600080fd5b506000546104919073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104ef57600080fd5b506103216104fe366004612ba7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090206001015490565b34801561053557600080fd5b5061049173f5d0140b4d53c9476dc1488bc6d8597d7393f07481565b34801561055d57600080fd5b5061032160015481565b34801561057357600080fd5b506102c6610582366004612c7c565b610b82565b34801561059357600080fd5b506104916105a2366004612bc4565b60009081526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b3480156105d657600080fd5b50600354610321565b3480156105eb57600080fd5b50610321610be3565b34801561060057600080fd5b5061049173b683fd165a16403eca7b16a426423145825e926081565b34801561062857600080fd5b50610321610637366004612ba7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b34801561066b57600080fd5b5061029f610c51565b34801561068057600080fd5b5061029f61068f366004612cdb565b610c65565b3480156106a057600080fd5b506106b46106af366004612ba7565b610cbf565b6040516102d29190612db7565b3480156106cd57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005473ffffffffffffffffffffffffffffffffffffffff16610491565b34801561071757600080fd5b506102c6610726366004612c7c565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561078957600080fd5b5061079d610798366004612bc4565b610d38565b6040805194855260208501939093529183015260608201526080016102d2565b3480156107c957600080fd5b50610321600081565b3480156107de57600080fd5b50610321610d95565b3480156107f357600080fd5b50610321610802366004612ba7565b610dc9565b34801561081357600080fd5b5061029f610822366004612cdb565b610e8c565b34801561083357600080fd5b5061032160025481565b34801561084957600080fd5b5061029f610858366004612ba7565b610f97565b61029f61086b366004612dfb565b6111a7565b34801561087c57600080fd5b5061029f61088b366004612c7c565b611337565b34801561089c57600080fd5b5061049173a1077a294dde1b09bb078844df40758a5d0f9a2781565b3480156108c457600080fd5b506106b461137b565b3480156108d957600080fd5b5061029f6108e8366004612ba7565b6113d3565b3480156108f957600080fd5b506106b4610908366004612ba7565b611437565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806109a057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006109b0610a42565b8210610a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f696e646578206f7574206f662072616e676520666f72206c697374696e67000060448201526064015b60405180910390fd5b60048281548110610a3057610a30612e27565b90600052602060002001549050919050565b600080546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad59190612e56565b905090565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b14816114b1565b610b1e83836114bb565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610b73576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7d82826115dc565b505050565b60008281526007602052604081205473ffffffffffffffffffffffffffffffffffffffff838116911614801590610bdc575060008381526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1615155b9392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b610c596116ba565b610c636000611748565b565b60005b8151811015610ca657610c9433838381518110610c8757610c87612e27565b60200260200101516117de565b80610c9e81612e9e565b915050610c68565b5060018054906000610cb783612e9e565b919050555050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604091829020805483518184028101840190945280845260609392830182828015610d2c57602002820191906000526020600020905b815481526020019060010190808311610d18575b50505050509050919050565b600080600080610d46610be3565b9350612710610d5785612580612ed6565b610d619190612eed565b9250610d6d8385612f28565b9150838511610d7f5750600080610d8d565b610d898486612f28565b9050805b509193509193565b600454600090610da55750600090565b6004600081548110610db957610db9612e27565b9060005260206000200154905090565b600080610dd4610a42565b11610e3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6e6f20746f6b656e73206c6973746564000000000000000000000000000000006044820152606401610a14565b610e43610a42565b670de0b6b3a7640000610e788473ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b610e829190612ed6565b6109a09190612eed565b60005b8151811015610ca6573373ffffffffffffffffffffffffffffffffffffffff1660076000848481518110610ec557610ec5612e27565b60209081029190910181015182528101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1603610f2357610f1e33838381518110610f1157610f11612e27565b6020026020010151611bb5565b610f85565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e657200000000000000000000000000000000000000000000006044820152606401610a14565b80610f8f81612e9e565b915050610e8f565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610fe25750825b905060008267ffffffffffffffff166001148015610fff5750303b155b90508115801561100d575080155b15611044576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156110a55784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6110c273907adc46bfbb50e974c42110860cc42fafa27cfa611e88565b6110ca611e99565b6110d2611ea9565b6110f1600073907adc46bfbb50e974c42110860cc42fafa27cfa6114bb565b506110fd6000336114bb565b50600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816179055831561119f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6111af611eb1565b60008111611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5175616e74697479206d757374206265206174206c65617374203100000000006044820152606401610a14565b60045460408051808201909152600f81527f6c6973746564436f756e743a2025730000000000000000000000000000000000602082015261125a9082611f32565b60408051808201909152600981527f746f4275793a20257300000000000000000000000000000000000000000000006020820152829061129a9082611f32565b6000821180156112ab575060018110155b156112f85760008183106112bf57816112c1565b825b905060005b818110156112e9576112d786611fc3565b806112e181612e9e565b9150506112c6565b506112f48183612f28565b9150505b8015611308576113088482612493565b505061133360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611371816114b1565b610b1e83836115dc565b606060048054806020026020016040519081016040528092919081815260200182805480156113c957602002820191906000526020600020905b8154815260200190600101908083116113b5575b5050505050905090565b6113db6116ba565b73ffffffffffffffffffffffffffffffffffffffff811661142b576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610a14565b61143481611748565b50565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604091829020600101805483518184028101840190945280845260609392830182828015610d2c5760200282019190600052602060002090815481526020019060010190808311610d185750505050509050919050565b61143481336125a6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff166115d25760008481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561156e3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506109a0565b60009150506109a0565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16156115d25760008481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506109a0565b336116f97f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610c63576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610a14565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000546040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff848116921690636352211e90602401602060405180830381865afa15801561184f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118739190612f3b565b73ffffffffffffffffffffffffffffffffffffffff161480156119db57506000546040517f081812fc00000000000000000000000000000000000000000000000000000000815260048101839052309173ffffffffffffffffffffffffffffffffffffffff169063081812fc90602401602060405180830381865afa158015611900573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119249190612f3b565b73ffffffffffffffffffffffffffffffffffffffff1614806119db57506000546040517fe985e9c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301523060248301529091169063e985e9c590604401602060405180830381865afa1580156119b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119db9190612f58565b611a41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6e6f74206f776e6564206f7220617070726f76656400000000000000000000006044820152606401610a14565b73ffffffffffffffffffffffffffffffffffffffff82811660008181526005602090815260408083208054600180820183558286528486209091018890556004805491820181557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101889055878552600790935281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001686179055925490517f42842e0e0000000000000000000000000000000000000000000000000000000081529182019390935230602482015260448101859052909291909116906342842e0e90606401600060405180830381600087803b158015611b4757600080fd5b505af1158015611b5b573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff87168152602081018690527fd14ef11f338338d2437da611a3ed1214407116682c6f46e2ea1c46407733cfa293500190505b60405180910390a1505050565b60008181526007602052604090205473ffffffffffffffffffffffffffffffffffffffff838116911614611c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f75736572206d75737420626520746865206f776e6572206f6620746865206c6960448201527f73746564206e66740000000000000000000000000000000000000000000000006064820152608401610a14565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600560205260408120905b8154811015611d9f5782826000018281548110611cb157611cb1612e27565b906000526020600020015403611d8d5781548290611cd190600190612f28565b81548110611ce157611ce1612e27565b9060005260206000200154826000018281548110611d0157611d01612e27565b6000918252602090912001558154829080611d1e57611d1e612f7a565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255848252600790526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055611d9f565b80611d9781612e9e565b915050611c92565b50611da98261264d565b6000546040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff858116602483015260448201859052909116906342842e0e90606401600060405180830381600087803b158015611e2357600080fd5b505af1158015611e37573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff87168152602081018690527f070be797ebb4cddc2d58b4fe8de5939531dd771aaed937a59fbe5c9dc8a5d0999350019050611ba8565b611e90612705565b6114348161276c565b611ea1612705565b610c63612774565b610c63612705565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611f2c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6113338282604051602401611f48929190612fa9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb60e72cc0000000000000000000000000000000000000000000000000000000017905261277c565b600080600080611fd234610d38565b9350935093509350600081111561201257604051339082156108fc029083906000818181858888f19350505050158015612010573d6000803e3d6000fd5b505b600061201c610d95565b9050806000036120e05761204473b683fd165a16403eca7b16a426423145825e926086612785565b6000546040517f691c65d400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063691c65d4906024016020604051808303816000875af11580156120b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120da9190612e56565b5061119f565b60008181526007602052604090205473ffffffffffffffffffffffffffffffffffffffff808816911603612170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f75736572206d757374206e6f7420626520746865206f776e65720000000000006044820152606401610a14565b60008181526007602052604090205473ffffffffffffffffffffffffffffffffffffffff166121fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f75736572206d757374206e6f74206265207a65726f00000000000000000000006044820152606401610a14565b60008181526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1661222a81866128a6565b61224873b683fd165a16403eca7b16a426423145825e9260856128a6565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560205260408120905b81548110156123ed578382600001828154811061228e5761228e612e27565b9060005260206000200154036123db57815482906122ae90600190612f28565b815481106122be576122be612e27565b90600052602060002001548260000182815481106122de576122de612e27565b60009182526020909120015581548290806122fb576122fb612f7a565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255858252600781526040822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905560018481018054918201815583529082200185905560028301805489929061238e90849061301c565b9250508190555087600260008282546123a7919061301c565b9091555050600380549060006123bc83612e9e565b9091555050600180549060006123d183612e9e565b91905055506123ed565b806123e581612e9e565b91505061226f565b506123f78361264d565b6000546040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8a8116602483015260448201869052909116906342842e0e90606401600060405180830381600087803b15801561247157600080fd5b505af1158015612485573d6000803e3d6000fd5b505050505050505050505050565b600061249e34610d38565b50505090506124cc73b683fd165a16403eca7b16a426423145825e926083836124c79190612ed6565b612785565b60005b82811015610b1e576000546040517f691c65d400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529091169063691c65d4906024016020604051808303816000875af1158015612549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256d9190612e56565b508061257881612e9e565b9150506124cf565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611333576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610a14565b60005b60045481101561133357816004828154811061266e5761266e612e27565b9060005260206000200154036126f3576004805461268e90600190612f28565b8154811061269e5761269e612e27565b9060005260206000200154600482815481106126bc576126bc612e27565b60009182526020909120015560048054806126d9576126d9612f7a565b600190038181906000526020600020016000905590555050565b806126fd81612e9e565b915050612650565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610c63576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113db612705565b612580612705565b61143481612b22565b73a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156127e157600080fd5b505af11580156127f5573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024810185905273a1077a294dde1b09bb078844df40758a5d0f9a27935063a9059cbb925060440190506020604051808303816000875af1158015612882573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7d9190612f58565b73a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561290257600080fd5b505af1158015612916573d6000803e3d6000fd5b50506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273f5d0140b4d53c9476dc1488bc6d8597d7393f07460048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602482015273a1077a294dde1b09bb078844df40758a5d0f9a27935063095ea7b3925060440190506020604051808303816000875af11580156129c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e49190612f58565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073a1077a294dde1b09bb078844df40758a5d0f9a27906370a0823190602401602060405180830381865afa158015612a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a749190612e56565b6040517f7314f1090000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8516602482015290915073f5d0140b4d53c9476dc1488bc6d8597d7393f07490637314f109906044016020604051808303816000875af1158015612afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1e9190612e56565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b600060208284031215612b5557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610bdc57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461143457600080fd5b600060208284031215612bb957600080fd5b8135610bdc81612b85565b600060208284031215612bd657600080fd5b5035919050565b600080600080600060808688031215612bf557600080fd5b8535612c0081612b85565b94506020860135612c1081612b85565b935060408601359250606086013567ffffffffffffffff80821115612c3457600080fd5b818801915088601f830112612c4857600080fd5b813581811115612c5757600080fd5b896020828501011115612c6957600080fd5b9699959850939650602001949392505050565b60008060408385031215612c8f57600080fd5b823591506020830135612ca181612b85565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020808385031215612cee57600080fd5b823567ffffffffffffffff80821115612d0657600080fd5b818501915085601f830112612d1a57600080fd5b813581811115612d2c57612d2c612cac565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715612d6f57612d6f612cac565b604052918252848201925083810185019188831115612d8d57600080fd5b938501935b82851015612dab57843584529385019392850192612d92565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612def57835183529284019291840191600101612dd3565b50909695505050505050565b60008060408385031215612e0e57600080fd5b8235612e1981612b85565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612e6857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612ecf57612ecf612e6f565b5060010190565b80820281158282048414176109a0576109a0612e6f565b600082612f23577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b818103818111156109a0576109a0612e6f565b600060208284031215612f4d57600080fd5b8151610bdc81612b85565b600060208284031215612f6a57600080fd5b81518015158114610bdc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b604081526000835180604084015260005b81811015612fd75760208187018101516060868401015201612fba565b5060006060828501015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150508260208301529392505050565b808201808211156109a0576109a0612e6f56fea2646970667358221220f216f9af8a4af3e6704fb6befffce4ebff25b9c0e6b3a15aa556ed09d48fb3ed64736f6c63430008140033
0x60806040526004361061026e5760003560e01c806370a0823111610153578063a7b7b087116100cb578063d547741f1161007f578063f1b2d6a311610064578063f1b2d6a3146108b8578063f2fde38b146108cd578063f61caf63146108ed57600080fd5b8063d547741f14610870578063ef8ef56f1461089057600080fd5b8063bf2d9e0b116100b0578063bf2d9e0b14610827578063c4d66de81461083d578063cce7ec131461085d57600080fd5b8063a7b7b087146107e7578063abaef99b1461080757600080fd5b80638da5cb5b1161012257806392e0d21d1161010757806392e0d21d1461077d578063a217fddf146107bd578063a32e3601146107d257600080fd5b80638da5cb5b146106c157806391d148541461070b57600080fd5b806370a082311461061c578063715018a61461065f5780637ca561ef146106745780638462151c1461069457600080fd5b806347ccca02116101e6578063592e0e00116101b55780636605ff661161019a5780636605ff66146105ca5780636817c76c146105df5780636cc0a25c146105f457600080fd5b8063592e0e00146105675780636352211e1461058757600080fd5b806347ccca02146104b65780634d59b64f146104e35780634eeb2e90146105295780634fb30d8b1461055157600080fd5b806318160ddd1161023d5780632f2ff15d116102225780632f2ff15d1461042957806336568abe14610449578063380d42441461046957600080fd5b806318160ddd146103c5578063248a9ca3146103da57600080fd5b806301ffc9a7146102a657806310312ace146102db578063107a274a1461032f578063150b7a021461034f57600080fd5b366102a15760405133903480156108fc02916000818181858888f1935050505015801561029f573d6000803e3d6000fd5b005b600080fd5b3480156102b257600080fd5b506102c66102c1366004612b43565b61090d565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506103216102f6366004612ba7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090206002015490565b6040519081526020016102d2565b34801561033b57600080fd5b5061032161034a366004612bc4565b6109a6565b34801561035b57600080fd5b5061039461036a366004612bdd565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016102d2565b3480156103d157600080fd5b50610321610a42565b3480156103e657600080fd5b506103216103f5366004612bc4565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b34801561043557600080fd5b5061029f610444366004612c7c565b610ada565b34801561045557600080fd5b5061029f610464366004612c7c565b610b24565b34801561047557600080fd5b5061049173907adc46bfbb50e974c42110860cc42fafa27cfa81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b3480156104c257600080fd5b506000546104919073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104ef57600080fd5b506103216104fe366004612ba7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090206001015490565b34801561053557600080fd5b5061049173f5d0140b4d53c9476dc1488bc6d8597d7393f07481565b34801561055d57600080fd5b5061032160015481565b34801561057357600080fd5b506102c6610582366004612c7c565b610b82565b34801561059357600080fd5b506104916105a2366004612bc4565b60009081526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b3480156105d657600080fd5b50600354610321565b3480156105eb57600080fd5b50610321610be3565b34801561060057600080fd5b5061049173b683fd165a16403eca7b16a426423145825e926081565b34801561062857600080fd5b50610321610637366004612ba7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b34801561066b57600080fd5b5061029f610c51565b34801561068057600080fd5b5061029f61068f366004612cdb565b610c65565b3480156106a057600080fd5b506106b46106af366004612ba7565b610cbf565b6040516102d29190612db7565b3480156106cd57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005473ffffffffffffffffffffffffffffffffffffffff16610491565b34801561071757600080fd5b506102c6610726366004612c7c565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561078957600080fd5b5061079d610798366004612bc4565b610d38565b6040805194855260208501939093529183015260608201526080016102d2565b3480156107c957600080fd5b50610321600081565b3480156107de57600080fd5b50610321610d95565b3480156107f357600080fd5b50610321610802366004612ba7565b610dc9565b34801561081357600080fd5b5061029f610822366004612cdb565b610e8c565b34801561083357600080fd5b5061032160025481565b34801561084957600080fd5b5061029f610858366004612ba7565b610f97565b61029f61086b366004612dfb565b6111a7565b34801561087c57600080fd5b5061029f61088b366004612c7c565b611337565b34801561089c57600080fd5b5061049173a1077a294dde1b09bb078844df40758a5d0f9a2781565b3480156108c457600080fd5b506106b461137b565b3480156108d957600080fd5b5061029f6108e8366004612ba7565b6113d3565b3480156108f957600080fd5b506106b4610908366004612ba7565b611437565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806109a057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006109b0610a42565b8210610a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f696e646578206f7574206f662072616e676520666f72206c697374696e67000060448201526064015b60405180910390fd5b60048281548110610a3057610a30612e27565b90600052602060002001549050919050565b600080546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad59190612e56565b905090565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b14816114b1565b610b1e83836114bb565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610b73576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7d82826115dc565b505050565b60008281526007602052604081205473ffffffffffffffffffffffffffffffffffffffff838116911614801590610bdc575060008381526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1615155b9392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b610c596116ba565b610c636000611748565b565b60005b8151811015610ca657610c9433838381518110610c8757610c87612e27565b60200260200101516117de565b80610c9e81612e9e565b915050610c68565b5060018054906000610cb783612e9e565b919050555050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604091829020805483518184028101840190945280845260609392830182828015610d2c57602002820191906000526020600020905b815481526020019060010190808311610d18575b50505050509050919050565b600080600080610d46610be3565b9350612710610d5785612580612ed6565b610d619190612eed565b9250610d6d8385612f28565b9150838511610d7f5750600080610d8d565b610d898486612f28565b9050805b509193509193565b600454600090610da55750600090565b6004600081548110610db957610db9612e27565b9060005260206000200154905090565b600080610dd4610a42565b11610e3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6e6f20746f6b656e73206c6973746564000000000000000000000000000000006044820152606401610a14565b610e43610a42565b670de0b6b3a7640000610e788473ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b610e829190612ed6565b6109a09190612eed565b60005b8151811015610ca6573373ffffffffffffffffffffffffffffffffffffffff1660076000848481518110610ec557610ec5612e27565b60209081029190910181015182528101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1603610f2357610f1e33838381518110610f1157610f11612e27565b6020026020010151611bb5565b610f85565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e657200000000000000000000000000000000000000000000006044820152606401610a14565b80610f8f81612e9e565b915050610e8f565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610fe25750825b905060008267ffffffffffffffff166001148015610fff5750303b155b90508115801561100d575080155b15611044576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156110a55784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6110c273907adc46bfbb50e974c42110860cc42fafa27cfa611e88565b6110ca611e99565b6110d2611ea9565b6110f1600073907adc46bfbb50e974c42110860cc42fafa27cfa6114bb565b506110fd6000336114bb565b50600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816179055831561119f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6111af611eb1565b60008111611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5175616e74697479206d757374206265206174206c65617374203100000000006044820152606401610a14565b60045460408051808201909152600f81527f6c6973746564436f756e743a2025730000000000000000000000000000000000602082015261125a9082611f32565b60408051808201909152600981527f746f4275793a20257300000000000000000000000000000000000000000000006020820152829061129a9082611f32565b6000821180156112ab575060018110155b156112f85760008183106112bf57816112c1565b825b905060005b818110156112e9576112d786611fc3565b806112e181612e9e565b9150506112c6565b506112f48183612f28565b9150505b8015611308576113088482612493565b505061133360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611371816114b1565b610b1e83836115dc565b606060048054806020026020016040519081016040528092919081815260200182805480156113c957602002820191906000526020600020905b8154815260200190600101908083116113b5575b5050505050905090565b6113db6116ba565b73ffffffffffffffffffffffffffffffffffffffff811661142b576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610a14565b61143481611748565b50565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604091829020600101805483518184028101840190945280845260609392830182828015610d2c5760200282019190600052602060002090815481526020019060010190808311610d185750505050509050919050565b61143481336125a6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff166115d25760008481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561156e3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506109a0565b60009150506109a0565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16156115d25760008481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506109a0565b336116f97f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610c63576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610a14565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000546040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff848116921690636352211e90602401602060405180830381865afa15801561184f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118739190612f3b565b73ffffffffffffffffffffffffffffffffffffffff161480156119db57506000546040517f081812fc00000000000000000000000000000000000000000000000000000000815260048101839052309173ffffffffffffffffffffffffffffffffffffffff169063081812fc90602401602060405180830381865afa158015611900573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119249190612f3b565b73ffffffffffffffffffffffffffffffffffffffff1614806119db57506000546040517fe985e9c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301523060248301529091169063e985e9c590604401602060405180830381865afa1580156119b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119db9190612f58565b611a41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6e6f74206f776e6564206f7220617070726f76656400000000000000000000006044820152606401610a14565b73ffffffffffffffffffffffffffffffffffffffff82811660008181526005602090815260408083208054600180820183558286528486209091018890556004805491820181557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101889055878552600790935281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001686179055925490517f42842e0e0000000000000000000000000000000000000000000000000000000081529182019390935230602482015260448101859052909291909116906342842e0e90606401600060405180830381600087803b158015611b4757600080fd5b505af1158015611b5b573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff87168152602081018690527fd14ef11f338338d2437da611a3ed1214407116682c6f46e2ea1c46407733cfa293500190505b60405180910390a1505050565b60008181526007602052604090205473ffffffffffffffffffffffffffffffffffffffff838116911614611c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f75736572206d75737420626520746865206f776e6572206f6620746865206c6960448201527f73746564206e66740000000000000000000000000000000000000000000000006064820152608401610a14565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600560205260408120905b8154811015611d9f5782826000018281548110611cb157611cb1612e27565b906000526020600020015403611d8d5781548290611cd190600190612f28565b81548110611ce157611ce1612e27565b9060005260206000200154826000018281548110611d0157611d01612e27565b6000918252602090912001558154829080611d1e57611d1e612f7a565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255848252600790526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055611d9f565b80611d9781612e9e565b915050611c92565b50611da98261264d565b6000546040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff858116602483015260448201859052909116906342842e0e90606401600060405180830381600087803b158015611e2357600080fd5b505af1158015611e37573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff87168152602081018690527f070be797ebb4cddc2d58b4fe8de5939531dd771aaed937a59fbe5c9dc8a5d0999350019050611ba8565b611e90612705565b6114348161276c565b611ea1612705565b610c63612774565b610c63612705565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611f2c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6113338282604051602401611f48929190612fa9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb60e72cc0000000000000000000000000000000000000000000000000000000017905261277c565b600080600080611fd234610d38565b9350935093509350600081111561201257604051339082156108fc029083906000818181858888f19350505050158015612010573d6000803e3d6000fd5b505b600061201c610d95565b9050806000036120e05761204473b683fd165a16403eca7b16a426423145825e926086612785565b6000546040517f691c65d400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529091169063691c65d4906024016020604051808303816000875af11580156120b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120da9190612e56565b5061119f565b60008181526007602052604090205473ffffffffffffffffffffffffffffffffffffffff808816911603612170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f75736572206d757374206e6f7420626520746865206f776e65720000000000006044820152606401610a14565b60008181526007602052604090205473ffffffffffffffffffffffffffffffffffffffff166121fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f75736572206d757374206e6f74206265207a65726f00000000000000000000006044820152606401610a14565b60008181526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1661222a81866128a6565b61224873b683fd165a16403eca7b16a426423145825e9260856128a6565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560205260408120905b81548110156123ed578382600001828154811061228e5761228e612e27565b9060005260206000200154036123db57815482906122ae90600190612f28565b815481106122be576122be612e27565b90600052602060002001548260000182815481106122de576122de612e27565b60009182526020909120015581548290806122fb576122fb612f7a565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255858252600781526040822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905560018481018054918201815583529082200185905560028301805489929061238e90849061301c565b9250508190555087600260008282546123a7919061301c565b9091555050600380549060006123bc83612e9e565b9091555050600180549060006123d183612e9e565b91905055506123ed565b806123e581612e9e565b91505061226f565b506123f78361264d565b6000546040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8a8116602483015260448201869052909116906342842e0e90606401600060405180830381600087803b15801561247157600080fd5b505af1158015612485573d6000803e3d6000fd5b505050505050505050505050565b600061249e34610d38565b50505090506124cc73b683fd165a16403eca7b16a426423145825e926083836124c79190612ed6565b612785565b60005b82811015610b1e576000546040517f691c65d400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529091169063691c65d4906024016020604051808303816000875af1158015612549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256d9190612e56565b508061257881612e9e565b9150506124cf565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611333576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610a14565b60005b60045481101561133357816004828154811061266e5761266e612e27565b9060005260206000200154036126f3576004805461268e90600190612f28565b8154811061269e5761269e612e27565b9060005260206000200154600482815481106126bc576126bc612e27565b60009182526020909120015560048054806126d9576126d9612f7a565b600190038181906000526020600020016000905590555050565b806126fd81612e9e565b915050612650565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610c63576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113db612705565b612580612705565b61143481612b22565b73a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156127e157600080fd5b505af11580156127f5573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024810185905273a1077a294dde1b09bb078844df40758a5d0f9a27935063a9059cbb925060440190506020604051808303816000875af1158015612882573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7d9190612f58565b73a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561290257600080fd5b505af1158015612916573d6000803e3d6000fd5b50506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273f5d0140b4d53c9476dc1488bc6d8597d7393f07460048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602482015273a1077a294dde1b09bb078844df40758a5d0f9a27935063095ea7b3925060440190506020604051808303816000875af11580156129c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e49190612f58565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073a1077a294dde1b09bb078844df40758a5d0f9a27906370a0823190602401602060405180830381865afa158015612a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a749190612e56565b6040517f7314f1090000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8516602482015290915073f5d0140b4d53c9476dc1488bc6d8597d7393f07490637314f109906044016020604051808303816000875af1158015612afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1e9190612e56565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b600060208284031215612b5557600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610bdc57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461143457600080fd5b600060208284031215612bb957600080fd5b8135610bdc81612b85565b600060208284031215612bd657600080fd5b5035919050565b600080600080600060808688031215612bf557600080fd5b8535612c0081612b85565b94506020860135612c1081612b85565b935060408601359250606086013567ffffffffffffffff80821115612c3457600080fd5b818801915088601f830112612c4857600080fd5b813581811115612c5757600080fd5b896020828501011115612c6957600080fd5b9699959850939650602001949392505050565b60008060408385031215612c8f57600080fd5b823591506020830135612ca181612b85565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020808385031215612cee57600080fd5b823567ffffffffffffffff80821115612d0657600080fd5b818501915085601f830112612d1a57600080fd5b813581811115612d2c57612d2c612cac565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715612d6f57612d6f612cac565b604052918252848201925083810185019188831115612d8d57600080fd5b938501935b82851015612dab57843584529385019392850192612d92565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612def57835183529284019291840191600101612dd3565b50909695505050505050565b60008060408385031215612e0e57600080fd5b8235612e1981612b85565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612e6857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612ecf57612ecf612e6f565b5060010190565b80820281158282048414176109a0576109a0612e6f565b600082612f23577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b818103818111156109a0576109a0612e6f565b600060208284031215612f4d57600080fd5b8151610bdc81612b85565b600060208284031215612f6a57600080fd5b81518015158114610bdc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b604081526000835180604084015260005b81811015612fd75760208187018101516060868401015201612fba565b5060006060828501015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150508260208301529392505050565b808201808211156109a0576109a0612e6f56fea2646970667358221220f216f9af8a4af3e6704fb6befffce4ebff25b9c0e6b3a15aa556ed09d48fb3ed64736f6c63430008140033