Profiling results ----------------- Total cpu time observed: 7528ms (out of 7668ms) Number of samples taken: 38 (once every 198ms) ======================================================================================= Caller Idx Total Self Name+src Local% ms(pct) ms(pct) Callee ======================================================================================= [1] 7528(100.0%) 0(0.0%) ??? ...lects/racket/private/more-scheme.rkt:261:28 profile-thunk16 [10] 100.0% --------------------------------------------------------------------------------------- ??? [75] 100.0% [2] 2414(32.1%) 0(0.0%) approximate9 ...both-ends/src/core/taylor.rkt:11:0 loop [11] 100.0% --------------------------------------------------------------------------------------- hash-ref! [20] 100.0% [3] 600(8.0%) 0(0.0%) ??? ...ection-both-ends/src/core/taylor.rkt:300:23 for-loop [13] 100.0% --------------------------------------------------------------------------------------- taylor [26] 100.0% [4] 584(7.8%) 0(0.0%) taylor-invert ...th-ends/src/core/taylor.rkt:317:0 parse-loop74 [42] 100.0% --------------------------------------------------------------------------------------- for-loop [100] 100.0% [5] 404(5.4%) 0(0.0%) syntax-e (unknown source) syntax-e/no-taint [14] 100.0% --------------------------------------------------------------------------------------- for-loop [100] 100.0% [6] 390(5.2%) 0(0.0%) expand-implicit (unknown source) resolve+shift28 [12] 100.0% --------------------------------------------------------------------------------------- for-loop [100] 100.0% [7] 216(2.9%) 0(0.0%) expand-identifier (unknown source) resolve+shift28 [12] 100.0% --------------------------------------------------------------------------------------- hash-ref! [20] 100.0% [8] 200(2.7%) 0(0.0%) ??? ...ection-both-ends/src/core/taylor.rkt:290:26 for-loop [15] 100.0% --------------------------------------------------------------------------------------- hash-ref! [20] 100.0% [9] 184(2.4%) 0(0.0%) f40 (unknown source) map [36] 100.0% --------------------------------------------------------------------------------------- ??? [1] 100.0% [10] 7528(100.0%) 0(0.0%) profile-thunk16 ...e/pkgs/profile-lib/main.rkt:9:0 run [16] 100.0% --------------------------------------------------------------------------------------- approximate9 [2] 100.0% [11] 2414(32.1%) 0(0.0%) loop ...tection-both-ends/src/core/taylor.rkt:86:4 ??? [75] 68.2% hash-ref! [20] 31.8% --------------------------------------------------------------------------------------- expand-identifier [7] 35.6% expand-implicit [6] 64.4% [12] 606(8.0%) 0(0.0%) resolve+shift28 (unknown source) fallback-loop [17] 100.0% --------------------------------------------------------------------------------------- ??? [3] 100.0% [13] 600(8.0%) 0(0.0%) for-loop ...n-both-ends/src/core/taylor.rkt:303:27 hash-ref! [20] 100.0% --------------------------------------------------------------------------------------- syntax-e [5] 100.0% [14] 404(5.4%) 0(0.0%) syntax-e/no-taint (unknown source) loop [96] 100.0% --------------------------------------------------------------------------------------- ??? [8] 100.0% [15] 200(2.7%) 0(0.0%) for-loop ...n-both-ends/src/core/taylor.rkt:290:52 ??? [18] 100.0% --------------------------------------------------------------------------------------- profile-thunk16 [10] 100.0% [16] 7528(100.0%) 0(0.0%) run ...et-7.5/share/pkgs/profile-lib/main.rkt:39:2 .../more-scheme.rkt:261:28 [19] 100.0% --------------------------------------------------------------------------------------- resolve+shift28 [12] 100.0% [17] 606(8.0%) 0(0.0%) fallback-loop (unknown source) for-loop [100] 100.0% --------------------------------------------------------------------------------------- for-loop [15] 100.0% [18] 200(2.7%) 0(0.0%) ??? ...ection-both-ends/src/core/taylor.rkt:293:19 hash-ref! [20] 100.0% --------------------------------------------------------------------------------------- f61 [24] 3.9% for-loop [81] 7.5% parse-loop74 [42] 10.7% run [16] 77.9% [19] 7528(100.0%) 0(0.0%) .../more-scheme.rkt:261:28 (unknown source) run-improve47 [21] 42.4% prepare-points-intervals [22] 23.0% temp85_0 [80] 9.5% oracle-error [27] 6.6% ??? [101] 3.8% loop [96] 2.6% eval-prog [28] 2.5% ??? [75] 2.5% get-final-combination [32] 2.4% baseline-error [33] 2.3% errors [76] 1.2% ulp-difference [31] 1.2% --------------------------------------------------------------------------------------- ??? [18] 2.1% ??? [30] 2.1% simplify* [29] 4.4% for-loop [13] 8.3% loop [11] 14.6% ??? [23] 26.0% ??? [75] 42.5% [20] 2414(32.1%) 212(2.8%) hash-ref! .../racket/private/more-scheme.rkt:376:2 ??? [23] 26.0% parse-loop74 [42] 16.0% ??? [25] 14.6% taylor [26] 12.1% ??? [3] 8.3% f61 [24] 7.5% simplify* [29] 4.4% f40 [9] 2.5% ??? [30] 2.1% ??? [8] 2.1% --------------------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [21] 4764(63.3%) 0(0.0%) run-improve47 ...-both-ends/src/mainloop.rkt:365:0 for-loop [34] 100.0% --------------------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [22] 1732(23.0%) 0(0.0%) prepare-points-intervals ...s/src/points.rkt:128:0 loop [35] 100.0% --------------------------------------------------------------------------------------- hash-ref! [20] 100.0% [23] 1618(21.5%) 0(0.0%) ??? ...tection-both-ends/src/core/taylor.rkt:44:15 hash-ref! [20] 100.0% --------------------------------------------------------------------------------------- parse-loop74 [42] 26.4% hash-ref! [20] 73.6% [24] 804(10.7%) 0(0.0%) f61 (unknown source) .../more-scheme.rkt:261:28 [19] 73.6% map [36] 26.4% --------------------------------------------------------------------------------------- hash-ref! [20] 100.0% [25] 768(10.2%) 0(0.0%) ??? ...tection-both-ends/src/core/taylor.rkt:67:15 ??? [75] 100.0% --------------------------------------------------------------------------------------- map [36] 8.7% hash-ref! [20] 30.4% taylor [26] 60.8% [26] 584(7.8%) 0(0.0%) taylor ...tion-both-ends/src/core/taylor.rkt:169:0 taylor [26] 60.8% taylor-invert [4] 30.4% map [36] 8.7% --------------------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [27] 496(6.6%) 0(0.0%) oracle-error ...ion-both-ends/src/points.rkt:185:0 for-loop [37] 100.0% --------------------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [28] 380(5.0%) 0(0.0%) eval-prog ...tion-both-ends/src/programs.rkt:106:0 ??? [38] 100.0% --------------------------------------------------------------------------------------- hash-ref! [20] 100.0% [29] 212(2.8%) 0(0.0%) simplify* ...on-both-ends/src/core/reduce.rkt:32:0 hash-ref! [20] 100.0% --------------------------------------------------------------------------------------- hash-ref! [20] 100.0% [30] 200(2.7%) 0(0.0%) ??? ...ection-both-ends/src/core/taylor.rkt:343:33 hash-ref! [20] 100.0% --------------------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [31] 180(2.4%) 180(2.4%) ulp-difference ...ion-both-ends/src/float.rkt:19:0 --------------------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [32] 180(2.4%) 0(0.0%) get-final-combination ...ds/src/mainloop.rkt:390:0 infer-splitpoints [39] 100.0% --------------------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [33] 176(2.3%) 0(0.0%) baseline-error ...n-both-ends/src/points.rkt:189:0 argmin [40] 100.0% --------------------------------------------------------------------------------------- run-improve47 [21] 100.0% [34] 4764(63.3%) 0(0.0%) for-loop ...ction-both-ends/src/mainloop.rkt:384:4 run-iter! [41] 100.0% --------------------------------------------------------------------------------------- prepare-points-intervals [22] 100.0% [35] 1732(23.0%) 0(0.0%) loop ...w-detection-both-ends/src/points.rkt:140:4 loop [43] 60.3% ??? [44] 39.7% --------------------------------------------------------------------------------------- f40 [9] 30.7% taylor [26] 34.0% f61 [24] 35.3% [36] 600(8.0%) 0(0.0%) map ...t-7.5/collects/racket/private/map.rkt:35:13 parse-loop74 [42] 66.0% taylor [26] 34.0% --------------------------------------------------------------------------------------- oracle-error [27] 100.0% [37] 496(6.6%) 0(0.0%) for-loop ...tection-both-ends/src/points.rkt:186:2 loop [96] 100.0% --------------------------------------------------------------------------------------- eval-prog [28] 100.0% [38] 380(5.0%) 0(0.0%) ??? ...tract/private/arrow-higher-order.rkt:379:33 ??? [45] 100.0% --------------------------------------------------------------------------------------- get-final-combination [32] 100.0% [39] 180(2.4%) 0(0.0%) infer-splitpoints ...nds/src/core/regimes.rkt:33:0 for-loop [46] 100.0% --------------------------------------------------------------------------------------- baseline-error [33] 100.0% [40] 176(2.3%) 0(0.0%) argmin ...acket-7.5/collects/racket/list.rkt:765:0 ??? [47] 100.0% --------------------------------------------------------------------------------------- for-loop [34] 100.0% [41] 4764(63.3%) 0(0.0%) run-iter! ...tion-both-ends/src/mainloop.rkt:346:0 gen-series! [48] 50.7% finalize-iter! [49] 28.0% simplify! [50] 13.5% gen-rewrites! [52] 7.9% --------------------------------------------------------------------------------------- parse-loop74 [42] 4.4% map [36] 15.8% taylor-invert [4] 36.3% hash-ref! [20] 43.5% [42] 1610(21.4%) 0(0.0%) parse-loop74 (unknown source) .../more-scheme.rkt:261:28 [19] 91.2% parse-loop74 [42] 4.4% f61 [24] 4.4% --------------------------------------------------------------------------------------- loop [35] 100.0% [43] 1044(13.9%) 538(7.1%) loop ...ow-detection-both-ends/src/points.rkt:81:2 ??? [75] 31.4% real->precision [55] 17.0% --------------------------------------------------------------------------------------- loop [35] 100.0% [44] 688(9.1%) 332(4.4%) ??? ...ow-detection-both-ends/src/points.rkt:121:6 sample-multi-bounded [53] 51.7% --------------------------------------------------------------------------------------- ??? [38] 100.0% [45] 380(5.0%) 0(0.0%) ??? ...ects/racket/contract/private/prop.rkt:567:4 ??? [51] 100.0% --------------------------------------------------------------------------------------- infer-splitpoints [39] 100.0% [46] 180(2.4%) 0(0.0%) for-loop ...on-both-ends/src/core/regimes.rkt:45:6 option-on-expr [54] 100.0% --------------------------------------------------------------------------------------- argmin [40] 100.0% [47] 176(2.3%) 0(0.0%) ??? ...w-detection-both-ends/src/points.rkt:190:27 eval-errors [56] 100.0% --------------------------------------------------------------------------------------- run-iter! [41] 100.0% [48] 2414(32.1%) 0(0.0%) gen-series! ...on-both-ends/src/mainloop.rkt:160:0 for-loop [57] 100.0% --------------------------------------------------------------------------------------- run-iter! [41] 100.0% [49] 1334(17.7%) 0(0.0%) finalize-iter! ...both-ends/src/mainloop.rkt:278:0 ??? [58] 100.0% --------------------------------------------------------------------------------------- run-iter! [41] 100.0% [50] 642(8.5%) 0(0.0%) simplify! ...tion-both-ends/src/mainloop.rkt:224:0 ??? [59] 100.0% --------------------------------------------------------------------------------------- ??? [45] 100.0% [51] 380(5.0%) 380(5.0%) ??? ...lects/racket/contract/private/orc.rkt:83:14 --------------------------------------------------------------------------------------- run-iter! [41] 100.0% [52] 374(5.0%) 0(0.0%) gen-rewrites! ...-both-ends/src/mainloop.rkt:183:0 for-loop [61] 50.8% for-loop [62] 49.2% --------------------------------------------------------------------------------------- ??? [44] 100.0% [53] 356(4.7%) 0(0.0%) sample-multi-bounded ...h-ends/src/points.rkt:14:0 random-ranges [60] 100.0% --------------------------------------------------------------------------------------- for-loop [46] 100.0% [54] 180(2.4%) 0(0.0%) option-on-expr ...-ends/src/core/regimes.rkt:124:0 err-lsts->split-indices [63] 100.0% --------------------------------------------------------------------------------------- loop [43] 100.0% [55] 178(2.4%) 0(0.0%) real->precision ...th-ends/src/programs.rkt:118:11 ??? [75] 100.0% --------------------------------------------------------------------------------------- ??? [47] 100.0% [56] 176(2.3%) 0(0.0%) eval-errors ...tion-both-ends/src/points.rkt:176:0 for-loop [64] 100.0% --------------------------------------------------------------------------------------- gen-series! [48] 100.0% [57] 2414(32.1%) 0(0.0%) for-loop ...ction-both-ends/src/mainloop.rkt:167:7 taylor-alt [65] 100.0% --------------------------------------------------------------------------------------- finalize-iter! [49] 100.0% [58] 1334(17.7%) 0(0.0%) ??? ...contract/private/arrow-val-first.rkt:486:18 for-loop [66] 100.0% --------------------------------------------------------------------------------------- simplify! [50] 100.0% [59] 642(8.5%) 0(0.0%) ??? ...ection-both-ends/src/core/simplify.rkt:42:0 egraph-run [67] 100.0% --------------------------------------------------------------------------------------- sample-multi-bounded [53] 100.0% [60] 356(4.7%) 168(2.2%) random-ranges ...on-both-ends/src/common.rkt:164:0 cons/c [68] 52.8% --------------------------------------------------------------------------------------- gen-rewrites! [52] 100.0% [61] 190(2.5%) 190(2.5%) for-loop ...tion-both-ends/src/mainloop.rkt:191:11 --------------------------------------------------------------------------------------- gen-rewrites! [52] 100.0% [62] 184(2.4%) 0(0.0%) for-loop ...ction-both-ends/src/mainloop.rkt:208:4 for-loop [69] 100.0% --------------------------------------------------------------------------------------- option-on-expr [54] 100.0% [63] 180(2.4%) 0(0.0%) err-lsts->split-indices .../core/regimes.rkt:263:0 loop [70] 100.0% --------------------------------------------------------------------------------------- eval-errors [56] 100.0% [64] 176(2.3%) 0(0.0%) for-loop ...tection-both-ends/src/points.rkt:178:2 ??? [75] 100.0% --------------------------------------------------------------------------------------- for-loop [57] 100.0% [65] 2414(32.1%) 0(0.0%) taylor-alt ...ion-both-ends/src/mainloop.rkt:146:0 for-loop [71] 100.0% --------------------------------------------------------------------------------------- ??? [58] 100.0% [66] 1334(17.7%) 0(0.0%) for-loop ...both-ends/src/core/alt-table.rkt:201:2 atab-add-altn [72] 100.0% --------------------------------------------------------------------------------------- ??? [59] 100.0% [67] 642(8.5%) 0(0.0%) egraph-run .../pkgs/egg-herbie-linux/main.rkt:49:0 egraph-add-exprs [73] 100.0% --------------------------------------------------------------------------------------- random-ranges [60] 100.0% [68] 188(2.5%) 188(2.5%) cons/c .../racket/contract/private/guts.rkt:500:15 --------------------------------------------------------------------------------------- for-loop [62] 100.0% [69] 184(2.4%) 0(0.0%) for-loop ...ction-both-ends/src/mainloop.rkt:209:6 ??? [75] 100.0% --------------------------------------------------------------------------------------- err-lsts->split-indices [63] 100.0% [70] 180(2.4%) 0(0.0%) loop ...ction-both-ends/src/core/regimes.rkt:314:4 for-loop [74] 100.0% --------------------------------------------------------------------------------------- taylor-alt [65] 100.0% [71] 2414(32.1%) 0(0.0%) for-loop ...ction-both-ends/src/mainloop.rkt:152:6 ??? [75] 100.0% --------------------------------------------------------------------------------------- for-loop [66] 100.0% [72] 1334(17.7%) 0(0.0%) atab-add-altn ...ends/src/core/alt-table.rkt:204:0 errors [76] 100.0% --------------------------------------------------------------------------------------- egraph-run [67] 100.0% [73] 642(8.5%) 0(0.0%) egraph-add-exprs ...gg-herbie-linux/main.rkt:111:0 ??? [77] 100.0% --------------------------------------------------------------------------------------- loop [70] 100.0% [74] 180(2.4%) 0(0.0%) for-loop ...n-both-ends/src/core/regimes.rkt:279:4 for-loop [78] 100.0% --------------------------------------------------------------------------------------- for-loop [64] 4.8% real->precision [55] 4.9% for-loop [69] 5.0% ??? [25] 7.0% loop [43] 9.0% .../more-scheme.rkt:261:28 [19] 10.2% loop [11] 15.0% location-do [79] 22.0% for-loop [71] 22.0% [75] 3652(48.5%) 548(7.3%) ??? ...tract/private/arrow-higher-order.rkt:375:33 location-do [79] 22.0% approximate9 [2] 22.0% hash-ref! [20] 22.0% ival-mult [83] 9.0% successfully-got-the-right-kind-of-function [84] 5.0% bf [85] 4.9% --------------------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 11.9% atab-add-altn [72] 88.1% [76] 1514(20.1%) 0(0.0%) errors ...detection-both-ends/src/points.rkt:198:0 for-loop [81] 74.4% temp85_0 [80] 25.6% --------------------------------------------------------------------------------------- egraph-add-exprs [73] 100.0% [77] 642(8.5%) 0(0.0%) ??? ...ction-both-ends/src/core/simplify.rkt:103:6 for-loop [82] 100.0% --------------------------------------------------------------------------------------- for-loop [74] 100.0% [78] 180(2.4%) 180(2.4%) for-loop ...n-both-ends/src/core/regimes.rkt:283:8 --------------------------------------------------------------------------------------- location-do [79] 34.8% ??? [75] 65.2% [79] 2414(32.1%) 0(0.0%) location-do ...ion-both-ends/src/programs.rkt:87:0 ??? [75] 65.2% location-do [79] 34.8% --------------------------------------------------------------------------------------- errors [76] 21.3% .../more-scheme.rkt:261:28 [19] 78.7% [80] 1822(24.2%) 0(0.0%) temp85_0 (unknown source) compile15 [86] 100.0% --------------------------------------------------------------------------------------- errors [76] 100.0% [81] 1126(15.0%) 0(0.0%) for-loop ...tection-both-ends/src/points.rkt:200:2 .../more-scheme.rkt:261:28 [19] 100.0% --------------------------------------------------------------------------------------- ??? [77] 100.0% [82] 642(8.5%) 642(8.5%) for-loop ...-both-ends/src/core/simplify.rkt:121:2 --------------------------------------------------------------------------------------- ??? [75] 100.0% [83] 328(4.4%) 0(0.0%) ival-mult ...n-both-ends/src/biginterval.rkt:210:0 epmul [87] 100.0% --------------------------------------------------------------------------------------- ??? [75] 100.0% [84] 184(2.4%) 184(2.4%) successfully-got-the-right-kind-of-function ...5:4 --------------------------------------------------------------------------------------- ??? [75] 100.0% [85] 178(2.4%) 178(2.4%) bf ...ath-lib/math/private/bigfloat/mpfr.rkt:615:2 --------------------------------------------------------------------------------------- temp85_0 [80] 100.0% [86] 1822(24.2%) 0(0.0%) compile15 (unknown source) temp91_0 [88] 100.0% --------------------------------------------------------------------------------------- ival-mult [83] 100.0% [87] 328(4.4%) 0(0.0%) epmul ...ction-both-ends/src/biginterval.rkt:199:0 bfmul [89] 100.0% --------------------------------------------------------------------------------------- compile15 [86] 100.0% [88] 1822(24.2%) 0(0.0%) temp91_0 (unknown source) temp118_0 [90] 88.4% compile-top9 [91] 11.6% --------------------------------------------------------------------------------------- epmul [87] 100.0% [89] 328(4.4%) 168(2.2%) bfmul ...-lib/math/private/bigfloat/mpfr.rkt:835:4 new-mpfr [92] 48.8% --------------------------------------------------------------------------------------- temp91_0 [88] 100.0% [90] 1610(21.4%) 0(0.0%) temp118_0 (unknown source) expand-capturing-lifts [93] 100.0% --------------------------------------------------------------------------------------- temp91_0 [88] 100.0% [91] 212(2.8%) 0(0.0%) compile-top9 (unknown source) compile-forms33 [94] 100.0% --------------------------------------------------------------------------------------- bfmul [89] 100.0% [92] 160(2.1%) 160(2.1%) new-mpfr ...b/math/private/bigfloat/mpfr.rkt:348:0 --------------------------------------------------------------------------------------- loop [96] 19.4% temp118_0 [90] 80.6% [93] 1998(26.5%) 204(2.7%) expand-capturing-lifts (unknown source) lambda-clause-expander [95] 80.6% loop [96] 9.2% --------------------------------------------------------------------------------------- compile-top9 [91] 100.0% [94] 212(2.8%) 212(2.8%) compile-forms33 (unknown source) --------------------------------------------------------------------------------------- expand-capturing-lifts [93] 100.0% [95] 1610(21.4%) 0(0.0%) lambda-clause-expander (unknown source) finish-bodys [97] 100.0% --------------------------------------------------------------------------------------- expand-capturing-lifts [93] 7.1% for-loop [37] 14.9% .../more-scheme.rkt:261:28 [19] 23.0% loop [96] 23.6% syntax-e/no-taint [14] 31.4% [96] 1288(17.1%) 184(2.4%) loop (unknown source) gf [99] 31.4% loop [96] 23.6% expand-capturing-lifts [93] 23.0% ??? [98] 14.9% --------------------------------------------------------------------------------------- lambda-clause-expander [95] 17.1% for-loop [100] 82.9% [97] 1610(21.4%) 0(0.0%) finish-bodys (unknown source) for-loop [100] 100.0% --------------------------------------------------------------------------------------- loop [96] 100.0% [98] 496(6.6%) 0(0.0%) ??? ...w-detection-both-ends/src/points.rkt:187:26 ??? [101] 100.0% --------------------------------------------------------------------------------------- loop [96] 100.0% [99] 404(5.4%) 0(0.0%) gf (unknown source) propagation-apply [102] 50.5% cache-or-reuse-set [103] 49.5% --------------------------------------------------------------------------------------- fallback-loop [17] 2.8% for-loop [100] 18.0% finish-bodys [97] 79.2% [100] 1610(21.4%) 1206(16.0%) for-loop (unknown source) finish-bodys [97] 66.2% for-loop [100] 18.0% syntax-e [5] 2.8% expand-implicit [6] 1.9% expand-identifier [7] 0.9% --------------------------------------------------------------------------------------- ??? [98] 46.4% .../more-scheme.rkt:261:28 [19] 53.6% [101] 1070(14.2%) 520(6.9%) ??? ...tion-both-ends/src/syntax/syntax.rkt:214:17 return/no-unsupplied [104] 34.0% ??? [105] 17.4% --------------------------------------------------------------------------------------- gf [99] 100.0% [102] 204(2.7%) 204(2.7%) propagation-apply (unknown source) --------------------------------------------------------------------------------------- gf [99] 100.0% [103] 200(2.7%) 200(2.7%) cache-or-reuse-set (unknown source) --------------------------------------------------------------------------------------- ??? [101] 100.0% [104] 364(4.8%) 174(2.3%) return/no-unsupplied ...ct/private/arr-i.rkt:566:0 filter [106] 52.2% --------------------------------------------------------------------------------------- ??? [101] 100.0% [105] 186(2.5%) 186(2.5%) ??? ...ects/racket/contract/private/guts.rkt:770:8 --------------------------------------------------------------------------------------- return/no-unsupplied [104] 100.0% [106] 190(2.5%) 190(2.5%) filter ...5/collects/racket/private/list.rkt:256:2 ---------------------------------------------------------------------------------------