aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts
Commit message (Expand)AuthorAgeFilesLines
* Change all package to depend on the new @0xproject/order-utils@1.0.0-rc.1Leonid Logvinov2018-07-201-1/+1
* Change all package to depend on the new @0xproject/sol-compiler@1.0.0Leonid Logvinov2018-07-201-1/+1
* Change all package to depend on the new @0xproject/dev-utils@1.0.0Leonid Logvinov2018-07-201-1/+1
* Change all package to depend on the new @0xproject/subproviders@1.0.0Leonid Logvinov2018-07-201-1/+1
* Change all package to depend on the new @0xproject/base-contract@1.0.0Leonid Logvinov2018-07-201-1/+1
* Change all package to depend on the new @0xproject/web3-wrapper@1.0.0Leonid Logvinov2018-07-201-1/+1
* Change all package to depend on the new @0xproject/abi-gen@1.0.0Leonid Logvinov2018-07-201-1/+1
* Change all package to depend on the new @0xproject/utils@1.0.0Leonid Logvinov2018-07-201-1/+1
* Change all package to depend on the new @0xproject/types@1.0.0-rc.1Leonid Logvinov2018-07-201-1/+1
* Change all package to depend on the new @0xproject/tslint-config@1.0.0Leonid Logvinov2018-07-201-1/+1
* Change all package to depend on the new @0xproject/typescript-typings@1.0.0Leonid Logvinov2018-07-201-1/+1
* Change all package to depend on the new ethereum-types@1.0.0Leonid Logvinov2018-07-201-1/+1
* merge v2-prototypeFabio Berger2018-07-182-1/+2
|\
| * Merge branch 'v2-prototype' into feature/order-watcher-v2Leonid Logvinov2018-07-1818-182/+201
| |\
| * | MergeLeonid Logvinov2018-07-181-1/+1
| * | Merge branch 'v2-prototype' into feature/order-watcher-v2Leonid Logvinov2018-07-1829-186/+534
| |\ \
| * | | Upgrade tslint to use prefer-readonlyLeonid Logvinov2018-07-131-1/+1
| * | | Update contract artifactsLeonid Logvinov2018-07-131-0/+1
* | | | Update package versionsFabio Berger2018-07-181-10/+10
| |_|/ |/| |
* | | Merge pull request #884 from 0xProject/export-more-0x.jsFabio Berger2018-07-1818-182/+201
|\ \ \ | |_|/ |/| |
| * | Fix prettierFabio Berger2018-07-182-9/+3
| * | Fix linterFabio Berger2018-07-181-1/+1
| * | merge v2-prototypeFabio Berger2018-07-1815-138/+484
| |\ \
| * | | Rename decodeAssetDataId to decodeAssetProxyId for consistencyFabio Berger2018-07-184-11/+11
| * | | Move encodeUint256 & decodeUint256 out of assetDataUtils since we don't want ...Fabio Berger2018-07-184-6/+31
| * | | Rename assetProxyUtils to assetDataUtilsFabio Berger2018-07-1716-176/+176
| | |/ | |/|
* | | Merge pull request #883 from 0xProject/feature/tslint-improvementsLeonid Logvinov2018-07-1816-48/+50
|\ \ \ | |_|/ |/| |
| * | Fix tslint issuesLeonid Logvinov2018-07-1715-47/+49
| * | Upgrade tslint to the newest versionLeonid Logvinov2018-07-171-1/+1
| |/
* | Add tests for getOrderInfo and getOrdersInfoAmir Bandeali2018-07-183-5/+311
* | Reorder checks in getOrderInfoAmir Bandeali2018-07-181-7/+9
* | Add getOrdersInfo functionAmir Bandeali2018-07-182-0/+24
* | Fix bugs having to do with block timestamps and order expirationTimesAlex Browne2018-07-1711-128/+142
|/
* Remove extra ERC20ProxyId from Forwarder constructorJacob Evans2018-07-112-3/+1
* Add Migrations for ForwarderJacob Evans2018-07-111-2/+2
* Add revert reasons and optimization to safeMathAmir Bandeali2018-07-111-3/+15
* Use 0.4.10 in AssetProxyOwner, add readBytes4 to contract and remove LibBytesAmir Bandeali2018-07-117-17/+76
* Update package versionsFabio Berger2018-07-101-11/+11
* Move functions out of Forwarder.solAmir Bandeali2018-07-0812-42/+35
* Add interfaces and mixinsAmir Bandeali2018-07-0816-61/+573
* Combine mixinsAmir Bandeali2018-07-086-284/+218
* Use interfaces instead of full contractsAmir Bandeali2018-07-084-7/+39
* Add lint-contracts to default lint commandAmir Bandeali2018-07-071-1/+1
* Remove TODOs that won't be addressedAmir Bandeali2018-07-074-10/+3
* Remove AbiV2 where unusedAmir Bandeali2018-07-0723-38/+27
* Only reset currentContextAddress if it was previously updatedAmir Bandeali2018-07-071-8/+11
* Change uint => uint256Amir Bandeali2018-07-071-8/+7
* Apply new linter rulesAmir Bandeali2018-07-0774-299/+351
* Update linter configAmir Bandeali2018-07-072-11/+14
* Fix importsLeonid Logvinov2018-07-061-2/+2
* Merge pull request #822 from 0xProject/v2-contract-wrappers-WIPLeonid Logvinov2018-07-0614-66/+68
|\
| * Make it possible to configure block polling interval in base contract wrapperLeonid Logvinov2018-07-0514-66/+68
* | Types: Move Forwarder Revert Reason into types packageJacob Evans2018-07-061-13/+6
* | Forwarder specify the revert reasonsJacob Evans2018-07-061-21/+31
* | Forwarder fix linter errorJacob Evans2018-07-061-1/+1
* | Update to new assertionsJacob Evans2018-07-061-18/+16
* | Merge pull request #522 from 0xProject/feature/contracts/forwarderJacob Evans2018-07-0618-8/+2163
|\ \
| * | Forwarding contract (squashed commits)Jacob Evans2018-07-0618-8/+2163
* | | Contracts 2.0.0 were linted with solhintAlex Shafranovich2018-07-0660-1/+78
* | | Added Solhint package and 'lint-contracts' npm scriptAlex Shafranovich2018-07-062-1/+20
| |/ |/|
* | merge v2-prototypeFabio Berger2018-07-0417-186/+235
|\ \
| * | Move NodeType caching out of web3-wrapper and into our internal codeAlex Browne2018-07-041-2/+8
| * | Add TransactionReceiptStatus type to ethereum-typesAlex Browne2018-07-041-2/+2
| * | Improve robustness of revert reason assertionsAlex Browne2018-07-0317-185/+228
* | | Remove unused imported Web3.jsFabio Berger2018-07-041-2/+1
|/ /
* | Update incorrect versions of depsFabio Berger2018-07-021-1/+1
* | Fix bug where 18 decimal tokens instead of 5 decimal tokens createdFabio Berger2018-07-021-1/+1
* | Disable custom-no-magic-number for blockFabio Berger2018-07-021-0/+2
* | Remove unused variableFabio Berger2018-07-021-1/+0
* | Merge branch 'v2-prototype' into fix/five_decimal_scenarioFabio Berger2018-07-02130-936/+874
|\|
| * Fix buildAmir Bandeali2018-06-307-31/+31
| * Update file structureAmir Bandeali2018-06-30125-199/+195
| * Make registerAssetProxy append onlyAmir Bandeali2018-06-3011-201/+67
| * Change getTransactionReceipt to awaitTransactionMinedAmir Bandeali2018-06-301-1/+1
| * Update expectRevertReasonOrAlwaysFailingTransactionAsync to check status codesAlex Browne2018-06-302-27/+38
| * Fix deployment to gethAmir Bandeali2018-06-302-7/+6
| * Fix testsAmir Bandeali2018-06-306-79/+146
| * Remove transferFrom, implement in fallback functionAmir Bandeali2018-06-306-290/+267
| * Merge pull request #774 from 0xProject/style/contracts/abiEncodeAsmCommentsAmir Bandeali2018-06-302-0/+22
| |\
| | * Updated hashing comments as-per PRGreg Hysen2018-06-291-9/+4
| | * Comments for ASM hashingGreg Hysen2018-06-262-0/+27
* | | Add commented out scenarios not run by defaultFabio Berger2018-07-021-16/+82
* | | Fix commentFabio Berger2018-07-021-2/+1
* | | Print out entire orderFill scenarioFabio Berger2018-07-021-7/+1
* | | Transfer ERC721 token instead of burning, so we can still set an allowance to...Fabio Berger2018-07-021-1/+9
* | | Fix bug where using nullAddress for order instead of actual taker addressFabio Berger2018-07-021-11/+3
* | | Add maker and taker balance/allowance scenarios to generateFillOrderCombinationFabio Berger2018-07-021-8/+24
|/ /
* | Remove unused constantsFabio Berger2018-06-281-2/+0
* | Reduce the userAddresses to the individual addresses actually used by tests, ...Fabio Berger2018-06-287-19/+32
* | Add await time constantFabio Berger2018-06-281-0/+2
* | Add missing awaitTransactionSuccessAsync callsFabio Berger2018-06-281-6/+10
* | Merge branch 'v2-prototype' into feature/combinatorial-testingFabio Berger2018-06-2718-736/+363
|\ \
| * | Fix buildAmir Bandeali2018-06-271-0/+3
| * | Add more revert reasons to testsAmir Bandeali2018-06-273-19/+43
| * | Make dispatchTransferFrom revert with reason from AssetProxy on failureAmir Bandeali2018-06-272-7/+6
| * | Remove redundant files, hard code function selector in dispatchTransferFrom, ...Amir Bandeali2018-06-2717-896/+201
| * | Updated offset of receiverData length to reflect new assetData encoding.Greg Hysen2018-06-271-2/+2
| * | ERC20 Custom storage layoutRemco Bloemen2018-06-272-3/+5
| * | Golf the authorization checkRemco Bloemen2018-06-272-122/+132
| * | ERC20 manual memory layoutRemco Bloemen2018-06-271-11/+6
| * | ERC20 inline returnRemco Bloemen2018-06-271-6/+11
| * | ERC721 inline returnRemco Bloemen2018-06-271-8/+9
| * | Golf ERC721 transferFromRemco Bloemen2018-06-272-3/+166
| * | Inline ERC20 tranferFrom selector constantRemco Bloemen2018-06-271-4/+3
| * | Optimize ERC20 transferFromRemco Bloemen2018-06-271-2/+126
* | | Move combinatorial fillOrder tests into the `fill_ordere` test fileFabio Berger2018-06-272-48/+21
* | | Fix testsFabio Berger2018-06-271-3/+6
* | | Fix type issueFabio Berger2018-06-271-2/+2
* | | Merge branch 'refactor/check-revert-reasons' into feature/combinatorial-testingFabio Berger2018-06-2711-87/+91
|\| |
| * | Temporarily switch revert reasons to `TransferFailed`. Should be `InvalidAmou...Fabio Berger2018-06-271-2/+2
| * | Expect RevertReason be passed in, not stringFabio Berger2018-06-261-1/+5
| * | Rename RevertReasons to RevertReason since singular enum names are more commonFabio Berger2018-06-2610-95/+95
| * | Merge branch 'v2-prototype' into refactor/check-revert-reasonsFabio Berger2018-06-2633-266/+449
| |\ \
* | | | Update AbstractAssetWrapperFabio Berger2018-06-261-1/+1
* | | | Rename to singularFabio Berger2018-06-261-9/+9
* | | | Fix merge issuesFabio Berger2018-06-265-17/+21
* | | | Merge branch 'v2-prototype' into feature/combinatorial-testingFabio Berger2018-06-2633-281/+460
|\ \ \ \ | | |/ / | |/| |
| * | | Don't use variables for revert reasonsAmir Bandeali2018-06-2614-86/+86
| * | | Add comments to dispatchTransferFromAmir Bandeali2018-06-261-30/+56
| * | | Document IAssetDataRemco Bloemen2018-06-261-0/+3
| * | | Compute bytes4 proxyid constantsRemco Bloemen2018-06-262-2/+2
| * | | Return inplace bytes in LibBytes.readBytesWithLengthRemco Bloemen2018-06-261-9/+7
| * | | Add Greg's documentation to MixinErc721TransferRemco Bloemen2018-06-261-33/+44
| * | | Add Greg's documentation to MixinErc20TransferRemco Bloemen2018-06-261-13/+35
| * | | Gas golf the transfer success logicRemco Bloemen2018-06-261-11/+10
| * | | Optimize like in PR #767Remco Bloemen2018-06-263-34/+157
| * | | Run prettier and fix linting errorsAmir Bandeali2018-06-261-18/+6
| * | | Fix testsAmir Bandeali2018-06-265-21/+4
| * | | Update testsRemco Bloemen2018-06-261-2/+2
| * | | Update testsRemco Bloemen2018-06-262-33/+20
| * | | Fix ERC721Proxy TokenIdRemco Bloemen2018-06-261-1/+1
| * | | Add IAssetDataRemco Bloemen2018-06-262-1/+2
| * | | WIPRemco Bloemen2018-06-263-2/+3
| * | | ABI encoded asset dataRemco Bloemen2018-06-269-29/+51
| * | | Remove proxyId argument from dispatchTransferFromRemco Bloemen2018-06-268-41/+20
| * | | Document all the contract test options in READMEFabio Berger2018-06-251-3/+43
| | |/ | |/|
* | | Fix inconsistency between contract and reference implementation of order vali...Fabio Berger2018-06-261-0/+2
* | | Prettier fixesFabio Berger2018-06-262-8/+2
* | | Fix tslint issuesFabio Berger2018-06-267-22/+4
* | | Check revert reasons in declarative and combinatorial testsFabio Berger2018-06-251-7/+8
* | | merge check-revert-reasonsFabio Berger2018-06-2511-66/+14
|\ \ \ | | |/ | |/|
| * | Move RevertReasons to @0xproject/types packageFabio Berger2018-06-2511-66/+14
| * | Add missing importFabio Berger2018-06-251-1/+4
* | | Add missing importFabio Berger2018-06-251-1/+4
* | | merge check-revert-reasonsFabio Berger2018-06-2515-129/+235
|\| |
| * | Merge branch 'v2-prototype' into refactor/check-revert-reasonsFabio Berger2018-06-2526-708/+965
| |\|
| * | Fix tslintFabio Berger2018-06-234-4/+4
| * | Fix prettierFabio Berger2018-06-235-15/+13
| * | Rename ContractLibErrors to RevertReasonsFabio Berger2018-06-2311-96/+96
| * | Remove revert reason 'Exchange' prefixFabio Berger2018-06-232-3/+3
| * | Move constants over to ContractLibError enum and update all testsFabio Berger2018-06-235-44/+42
| * | Standardize ERC20 error strings given conventionFabio Berger2018-06-231-3/+2
| * | Fix test now that contract reverts with messageFabio Berger2018-06-222-5/+4
| * | Merge branch 'v2-prototype' into refactor/check-revert-reasonsFabio Berger2018-06-223-27/+48
| |\ \
| * | | Add revert reason checks to wrapper testsFabio Berger2018-06-221-10/+19
| * | | Fix testsFabio Berger2018-06-221-2/+2
| * | | Change Whitelist error messages to conform to rest and added revert reason ch...Fabio Berger2018-06-223-21/+31
| * | | Add revert reason checks to match_orders testsFabio Berger2018-06-221-7/+18
| * | | Fix testsFabio Berger2018-06-221-2/+2
| * | | Merge branch 'v2-prototype' into refactor/check-revert-reasonsFabio Berger2018-06-2239-382/+894
| |\ \ \
| * | | | Check revert reason in dispatcher testsFabio Berger2018-06-222-5/+13
| * | | | remove unused importFabio Berger2018-06-221-1/+0
| * | | | Test revert reasons in proxy testsFabio Berger2018-06-211-11/+23
| * | | | remove onlyFabio Berger2018-06-211-1/+1
| * | | | Check revert reasons in Authorizable testsFabio Berger2018-06-212-6/+15
| * | | | Change revert reason in ownable to be similar to all other revert reasonsFabio Berger2018-06-211-1/+1
| * | | | remove .onlyFabio Berger2018-06-211-1/+1
| * | | | Update core tests to actually check revert messageFabio Berger2018-06-213-34/+97
* | | | | Merge branch 'v2-prototype' into feature/combinatorial-testingFabio Berger2018-06-2554-1100/+1890
|\ \ \ \ \ | | |_|_|/ | |/| | |
| * | | | Fix typos in commentsRemco Bloemen2018-06-231-2/+2
| * | | | Add modifier and tests for removeAuthorizedAddressAtIndexAmir Bandeali2018-06-233-2/+79
| * | | | Update and add testsAmir Bandeali2018-06-234-173/+274
| * | | | Change removeAuthorizedAddress => removeAuthorizedAddressAtIndexAmir Bandeali2018-06-232-13/+22
| * | | | Move isFunctionRemoveAuthorizedAddress to testRemco Bloemen2018-06-236-22/+70
| * | | | Fix usage of `popLastByte`Remco Bloemen2018-06-231-2/+2
| * | | | Fix LibBytes is a libraryRemco Bloemen2018-06-236-15/+12
| * | | | Remove `areBytesEqual`Remco Bloemen2018-06-231-35/+0
| * | | | Fix usage of `contentAddress()`Remco Bloemen2018-06-231-2/+2
| * | | | Clean low bits in bytes4Remco Bloemen2018-06-231-0/+3
| * | | | Clean high bits in addressRemco Bloemen2018-06-231-0/+4
| * | | | Refactor LibBytes.readBytes4 for consistencyRemco Bloemen2018-06-234-14/+25
| * | | | Fix LibBytes.equalsRemco Bloemen2018-06-231-21/+4
| * | | | Add trailing garbage testcase for LibBytes.equalsRemco Bloemen2018-06-232-0/+21
| * | | | Rename bytes.equalsRemco Bloemen2018-06-233-15/+50
| * | | | Add slice and sliceDestructiveRemco Bloemen2018-06-231-0/+46
| * | | | Rename bytes.rawAddress and add bytes.contentAddressRemco Bloemen2018-06-232-8/+25
| * | | | Rename read/writeBytesWithLengthRemco Bloemen2018-06-234-36/+36
| * | | | Using LibBytes for bytesRemco Bloemen2018-06-236-26/+38
| * | | | Make LibBytes a libraryRemco Bloemen2018-06-236-35/+30
| * | | | Merge LibMem and LibBytesRemco Bloemen2018-06-2311-399/+322
| * | | | Use provided mem in refernce memcpyRemco Bloemen2018-06-231-2/+2
| * | | | Merge pull request #749 from 0xProject/feature/contracts/transactionHashAsmAmir Bandeali2018-06-231-8/+18
| |\ \ \ \ | | |_|_|/ | |/| | |
| | * | | Apply mask to address to zero-out unused bytes.Greg Hysen2018-06-231-1/+1
| | * | | Converted `hashZeroExTransaction` to assembly. Saves 1k gasGreg Hysen2018-06-221-8/+18
| * | | | Merge pull request #748 from 0xProject/fix/contracts/nullAssetProxyFabio Berger2018-06-223-27/+48
| |\ \ \ \ | | |_|_|/ | |/| | |
| | * | | Check that assetProxy exists before attempting transferAmir Bandeali2018-06-223-27/+48
| * | | | Merge pull request #752 from 0xProject/make-promises-safe-preloaderFabio Berger2018-06-2211-11/+1
| |\ \ \ \
| | * | | | Use make-promises-safe as a preloader instead of manually importingAlex Browne2018-06-2211-11/+1
| | | |/ / | | |/| |
| * | | | Merge pull request #751 from 0xProject/feature/contracts/compilerRunsAmir Bandeali2018-06-221-1/+1
| |\ \ \ \ | | |/ / / | |/| | |
| | * | | Updated compiler runs to be 1,000,000Greg Hysen2018-06-221-1/+1
| * | | | Add event to setSignatureValidatorApproval, rename signer => signerAddress ac...Amir Bandeali2018-06-2215-70/+144
| * | | | Add senderAddress to Fill and Cancel logs, add comments to events and typesAmir Bandeali2018-06-225-44/+47
| | |/ / | |/| |
| * | | Remove unreachable PreSigned checkAustin Roberts2018-06-221-4/+0
| |/ /
| * | Set settleOrder and settleMatchedOrders to privateGreg Hysen2018-06-214-25/+2
| * | Removed MixinSettlement. Moved `settleOrder` into `MixinExchangeCore` and `se...Greg Hysen2018-06-218-238/+205
| * | LinterGreg Hysen2018-06-211-2/+1
| * | Renamed constants in test wallet/validatorGreg Hysen2018-06-212-11/+11
| * | Few more minor #nit wording changesGreg Hysen2018-06-212-5/+5
| * | Changed wording of two tests #nitGreg Hysen2018-06-211-2/+2
| * | Minor improvements to MixinSignatureValidator testsGreg Hysen2018-06-211-14/+8
| * | Remove .onlyGreg Hysen2018-06-211-1/+1
| * | Fixed two mislabelled revert reasons + Signature Validator revert tests worki...Greg Hysen2018-06-213-8/+17
| * | Minor style tweaksGreg Hysen2018-06-213-8/+8
| * | Twenty new tests for MixinSignatureValidator. Fixed handling of unsupported t...Greg Hysen2018-06-219-27/+530
| |/
* | Add support for approveAll in assetWrapper and fillOrderScenariosFabio Berger2018-06-214-5/+80
* | Improve verbose loggingFabio Berger2018-06-211-2/+5
* | Fix merge variable name issueFabio Berger2018-06-201-1/+1
* | Add support for setting allowance to unlimitedFabio Berger2018-06-202-7/+35
* | Add noop conditionals for clarityFabio Berger2018-06-201-0/+10
* | Rename for clarityFabio Berger2018-06-201-8/+8
* | Split balance and allowance amount types in prep of adding the "unlimited" al...Fabio Berger2018-06-203-51/+59
* | Remove unneeded explicit type defFabio Berger2018-06-201-1/+1
* | Add TS 2.7 numeric separators to improve readabilityFabio Berger2018-06-201-6/+6
* | Merge branch 'v2-prototype' into feature/combinatorial-testingFabio Berger2018-06-2021-103/+444
|\|
| * Merge pull request #637 from 0xProject/bug/contracts/eip712-191-prefixJacob Evans2018-06-207-45/+166
| |\
| | * Fix closing parens in liborderJacob Evans2018-06-201-16/+15
| | * Assembler orderHash functionRemco Bloemen2018-06-191-18/+22
| | * Optimize and remove redundant encodePackedJacob Evans2018-06-194-13/+23
| | * Merge branch 'v2-prototype' into bug/contracts/eip712-191-prefixJacob Evans2018-06-1870-929/+2461
| | |\
| | * | Rebase and update feedbackJacob Evans2018-06-184-81/+85
| | * | Basic EIP712 encoderJacob Evans2018-06-081-10/+11
| | * | Update Order utils to use eip712Jacob Evans2018-06-069-178/+50
| | * | Add missing EIP191 prefix for EIP712Jacob Evans2018-06-0510-50/+279
| * | | Update after rebaseJacob Evans2018-06-201-7/+1
| * | | ERC721Proxy Always call safeTransferFromJacob Evans2018-06-201-2/+6
| * | | Rename makerEpoch => orderEpochAmir Bandeali2018-06-207-46/+49
| * | | Make cancelOrdersUpTo compatible with sender abstractionAmir Bandeali2018-06-208-8/+225
| * | | Merge pull request #683 from 0xProject/fix/contracts/memcpyRemco Bloemen2018-06-191-10/+12
| |\ \ \
| | * | | Simplified handling of source < 32 edge caseRemco Bloemen2018-06-111-10/+12
* | | | | Add ability for verbose loggingFabio Berger2018-06-201-2/+10
* | | | | Fix typoFabio Berger2018-06-191-2/+2
* | | | | Rename NewOrderFactory to OrderFactoryFromScenario for clarityFabio Berger2018-06-192-5/+5
* | | | | Remove hack in ERC20WrapperFabio Berger2018-06-197-12/+30
* | | | | Cleanup coreCombinatorialUtilsFabio Berger2018-06-191-220/+226
* | | | | Comments and cleanupFabio Berger2018-06-191-20/+8
* | | | | Merge branch 'v2-prototype' into feature/combinatorial-testingFabio Berger2018-06-197-141/+218
|\| | | |
| * | | | Merge pull request #728 from 0xProject/fix/post-dev-publishFabio Berger2018-06-191-12/+12
| |\ \ \ \
| | * | | | Fix additional versions and update yarn.lockFabio Berger2018-06-191-1/+1
| | * | | | Update all package versions to match latest published to NPMFabio Berger2018-06-191-11/+11
| * | | | | Merge pull request #659 from 0xProject/feature/contracts/split-proxy-internal...Jacob Evans2018-06-196-129/+206
| |\ \ \ \ \ | | |/ / / / | |/| | | |