async_select/
lib.rs

1#![no_std]
2
3/// # Select multiplex asynchronous futures simultaneously
4///
5/// `select!` supports three different clauses:
6///
7/// * pattern = future [, if condition] => code,
8/// * default => code,
9/// * complete => code,
10///
11/// ## Evaluation order
12/// * All conditions and futures are evaluated before selection.
13/// * Future expression is not evaluated if corresponding condition evaluated to false.
14/// * Whenever a branch is ready, its clause is executed. And the whole select returns.
15/// * Fail to match a refutable pattern will disable that branch.
16/// * `default` clause is executed if no futures are ready. That is non blocking mode.
17/// * If all branches are disabled by conditions or refutable pattern match, it resort to
18///   `complete` or `default` in case of no `complete`.
19///
20/// ## Panics
21/// * Panic when all futures are disabled or completed and there is no `default` or `complete`.
22///
23/// ## Limitations
24/// * Support up to 64 branches.
25/// * Refutability check may cause false negative compilation error. As results are matched against
26///   `&mut output` but not value which will be fed to matching clause.
27///
28/// ## Comparing with `tokio::select!`
29/// * Future expression is only evaluated if condition meets.
30///   ```
31///   use std::future::ready;
32///   use async_select::select;
33///
34///   async fn guard_future_by_condition() {
35///       let opt: Option<i32> = None;
36///       let r = select! {
37///           v = ready(opt.unwrap()), if opt.is_some() => v,
38///           v = ready(6) => v,
39///       };
40///       assert_eq!(r, 6);
41///   }
42///   ```
43///   This will panic in `tokio::select!` as it evaluates `ready(opt.unwrap())` irrespective of
44///   corresponding condition.
45/// * There is no `default` counterpart in `tokio::select!`. But it could be emulated with `biased`
46///   and `ready(())`.`complete` is same as `else` in `tokio::select!`.
47/// * `tokio::select!` strips the pattern using in refutability through `proc_marco`. This avoid
48///   false negative compilation error.
49/// * `async_select::select!` is dependency free and hence `no_std` compatible.
50///
51/// ## Polling order
52/// By default, the polling order of each branch is indeterminate. Use `biased;` to poll
53/// sequentially if desired.
54/// ```
55/// use async_select::select;
56/// use core::future::{pending, ready};
57///
58/// async fn poll_sequentially() {
59///     let r = select! {
60///         biased;
61///         default => unreachable!(),
62///         _ = pending() => unreachable!(),
63///         _ = pending() => unreachable!(),
64///         v = ready(5) => v,
65///         v = ready(6) => v,
66///         v = ready(7) => v,
67///     };
68///     assert_eq!(r, 5);
69/// }
70/// ```
71///
72/// ## Efficiency
73/// `select!` blindly `Future:poll` all enabled futures without checking for waking branch.
74///
75/// ## Examples
76/// ```rust
77/// use async_select::select;
78/// use core::future::{pending, ready};
79///
80/// async fn on_ready() {
81///     let r = select! {
82///         _ = pending() => unreachable!(),
83///         v = ready(5) => v,
84///         default => unreachable!(),
85///     };
86///     assert_eq!(r, 5);
87/// }
88/// ```
89#[macro_export]
90macro_rules! select {
91    ($($token:tt)*) => {
92        $crate::select_internal!($($token)*)
93    };
94
95    // For documentation purpose.
96    (default => $body:expr) => {};
97    (complete => $body:expr) => {};
98    ($pattern:pat = $future:expr $(, if $condition:expr)? => $body:expr) => {};
99}
100
101#[doc(hidden)]
102#[macro_export]
103macro_rules! select_internal {
104    // @list($tokens:tt $count:tt $branches:tt $default:tt $complete:tt) list branches
105    // @poll all futures
106    //
107    // @count($index:tt) count index
108    // @assign($index, $futures:ident, $future:expr) assign optional future to indexed tuple field
109    // @access($index, $futures:ident) access future from indexed tuple field
110    // @unwrap($index, $pattern:pat) pattern match output base on index
111    // @wrap($index, $output) wrap output based on index for pattern match
112    //
113    //
114    // As you may saw this macro is pretty long, most complexity comes from:
115    // * Macros are not permitted to use everywhere. Say, you can't iterate repetition inside "<_>",
116    //   so I have to write generic output types for all combination up to 64 branches. This takes 2500
117    //   lines.
118    // * Support up to 64 branches and avoid macro expansion `recursion_limit` so I have to exhaust
119    //   possible match in one round.
120    // * The match is not greedy, so I can't use `$(,)? $($token:tt)*` but exhaustion as `,` is also a
121    //   valid token.
122    // * There is no way to expand at most once with else clause. So I have to match and normalize
123    //   separately. This is `$(, if $condition:expr)?`.
124    // * Macro output must be itself a valid syntex tree. Say, I can't generate `if $condition {` and
125    //   `}` separately based on at most once repetion.
126    // * There is no way to capture matched literals but handwritten. I can't use `$(ref)? $(mut)?` to
127    //   capture them and use it later. So, I have to exhauste them.
128    // * Given above, I have to exhuaste combinations of `$(ref)?`, `$(mut)?`, `$(, if $condition:expr)?`
129    //   and `$(,)?`.
130    //
131    // I might be totally wrong in above. Please point them out in issue/pr.
132
133    (@list
134        ()
135        $count:tt
136        ()
137        $default:tt
138        $complete:tt
139        ; biased = $biased:expr
140    ) => {
141        $crate::select_internal!(@no-branch {
142            default: $default,
143            complete: $complete,
144        })
145    };
146    (@list
147        ()
148        $count:tt
149        $branches:tt
150        ()
151        ()
152        ; biased = $biased:expr
153    ) => {
154        $crate::select_internal!(
155            @poll
156            non_blocking = false,
157            when_completed = false,
158            count = $count,
159            branches = $branches,
160            default = unreachable!("not in unblocking mode"),
161            complete = panic!("all branches are disabled or completed and there is no `default` nor `complete`")
162            ; biased = $biased
163        )
164    };
165    (@list
166        ()
167        $count:tt
168        $branches:tt
169        ()
170        ($complete:tt)
171        ; biased = $biased:expr
172    ) => {
173        $crate::select_internal!(
174            @poll
175            non_blocking = false,
176            when_completed = true,
177            count = $count,
178            branches = $branches,
179            default = unreachable!("not in unblocking mode"),
180            complete = $complete
181            ; biased = $biased
182        )
183    };
184    (@list
185        ()
186        $count:tt
187        $branches:tt
188        ($default:tt)
189        ()
190        ; biased = $biased:expr
191    ) => {
192        $crate::select_internal!(
193            @poll
194            non_blocking = true,
195            when_completed = false,
196            count = $count,
197            branches = $branches,
198            default = $default,
199            complete = panic!("all branches are disabled or completed and there is no `default` nor `complete`")
200            ; biased = $biased
201        )
202    };
203    (@list
204        ()
205        $count:tt
206        $branches:tt
207        ($default:tt)
208        ($complete:tt)
209        ; biased = $biased:expr
210    ) => {
211        $crate::select_internal!(
212            @poll
213            non_blocking = true,
214            when_completed = true,
215            count = $count,
216            branches = $branches,
217            default = $default,
218            complete = $complete
219            ; biased = $biased
220        )
221    };
222
223    // `complete` in last case.
224    (@list
225        (complete => $body:expr $(,)?)
226        $count:tt
227        $branches:tt
228        $default:tt
229        ($complete:tt)
230        ; biased = $biased:expr
231    ) => {
232        compile_error!("`select!`: more than one `complete` clauses")
233    };
234    (@list
235        (complete => $body:expr, $($token:tt)*)
236        $count:tt
237        $branches:tt
238        $default:tt
239        ($complete:tt)
240        ; biased = $biased:expr
241    ) => {
242        compile_error!("`select!`: more than one `complete` clauses")
243    };
244    (@list
245        (complete => $body:expr)
246        $count:tt
247        $branches:tt
248        $default:tt
249        ()
250        ; biased = $biased:expr
251    ) => {
252        $crate::select_internal!(
253            @list
254            ()
255            $count
256            $branches:tt
257            $default
258            ($body)
259            ; biased = $biased
260         )
261    };
262    // `complete` in no last case.
263    (@list
264        (complete => $body:block, $($token:tt)*)
265        $count:tt
266        $branches:tt
267        $default:tt
268        ()
269        ; biased = $biased:expr
270    ) => {
271        $crate::select_internal!(
272            @list
273            ($($token)*)
274            $count
275            $branches
276            $default
277            ($body)
278            ; biased = $biased
279        )
280    };
281    (@list
282        (complete => $body:block $($token:tt)*)
283        $count:tt
284        $branches:tt
285        $default:tt
286        ()
287        ; biased = $biased:expr
288    ) => {
289        $crate::select_internal!(
290            @list
291            ($($token)*)
292            $count
293            $branches
294            $default
295            ($body)
296            ; biased = $biased
297        )
298    };
299    (@list
300        (complete => $body:expr, $($token:tt)*)
301        $count:tt
302        $branches:tt
303        $default:tt
304        ()
305        ; biased = $biased:expr
306    ) => {
307        $crate::select_internal!(
308            @list
309            ($($token)*)
310            $count
311            $branches
312            $default
313            ($body)
314            ; biased = $biased
315        )
316    };
317    (@list
318        (complete => $($token:tt)*)
319        $count:tt
320        $branches:tt
321        $default:tt
322        $complete:tt
323        ; biased = $biased:expr
324    ) => {
325        $crate::select_internal!(@missing-comma "complete clause");
326    };
327
328    // multiple `default` clauses
329    (@list
330        (default => $body:expr $(,)?)
331        $count:tt
332        $branches:tt
333        ($default:tt)
334        $complete:tt
335        ; biased = $biased:expr
336    ) => {
337        compile_error!("`select!`: more than one `default` clauses")
338    };
339    (@list
340        (default => $body:expr, $($token:tt)*)
341        $count:tt
342        $branches:tt
343        ($default:tt)
344        $complete:tt
345        ; biased = $biased:expr
346    ) => {
347        compile_error!("`select!`: more than one `default` clauses")
348    };
349    // `default` in last case
350    (@list
351        (default => $body:expr)
352        $count:tt
353        $branches:tt
354        ()
355        $complete:tt
356        ; biased = $biased:expr
357    ) => {
358        $crate::select_internal!(
359            @list
360            ()
361            $count
362            $branches
363            ($body)
364            $complete
365            ; biased = $biased
366        )
367    };
368    // `default` in no last case
369    (@list
370        (default => $body:block, $($token:tt)*)
371        $count:tt
372        $branches:tt
373        ()
374        $complete:tt
375        ; biased = $biased:expr
376    ) => {
377        $crate::select_internal!(
378            @list
379            ($($token)*)
380            $count
381            $branches
382            ($body)
383            $complete
384            ; biased = $biased
385        )
386    };
387    (@list
388        (default => $body:block $($token:tt)*)
389        $count:tt
390        $branches:tt
391        ()
392        $complete:tt
393        ; biased = $biased:expr
394    ) => {
395        $crate::select_internal!(
396            @list
397            ($($token)*)
398            $count
399            $branches
400            ($body)
401            $complete
402            ; biased = $biased
403        )
404    };
405    (@list
406        (default => $body:expr, $($token:tt)*)
407        $count:tt
408        $branches:tt
409        ()
410        $complete:tt
411        ; biased = $biased:expr
412    ) => {
413        $crate::select_internal!(
414            @list
415            ($($token)*)
416            $count
417            $branches
418            ($body)
419            $complete
420            ; biased = $biased
421        )
422    };
423    (@list
424        (default => $($token:tt)*)
425        $count:tt
426        $branches:tt
427        $default:tt
428        $complete:tt
429        ; biased = $biased:expr
430    ) => {
431        $crate::select_internal!(@missing-comma "default clause");
432    };
433
434    (@list
435        ()
436        ($pattern:pat = $($token:tt)*)
437        $count:tt
438        $branches:tt
439        $default:tt
440        $complete:tt
441        ; biased = $biased:expr
442    ) => {
443        $crate::select_internal!(
444            @list
445            ($pattern)
446            ($pattern = $($token)*)
447            $count
448            $branches
449            $default
450            $complete
451            ; biased = $biased
452        )
453    };
454
455    // block with trailing comma
456    (@list
457        (ref mut $ident:ident@$subpattern:pat = $future:expr, if $condition:expr => $body:block, $($token:tt)*)
458        ($($count:tt)*)
459        ($($branch:tt)*)
460        $default:tt
461        $complete:tt
462        ; biased = $biased:expr
463    ) => {
464        $crate::select_internal!(
465            @list
466            ($($token)*)
467            ($($count)* _)
468            ($($branch)* [($($count)*), $subpattern] ref mut $ident@$subpattern = $future, if $condition => $body,)
469            $default
470            $complete
471            ; biased = $biased
472        )
473    };
474    (@list
475        (ref $ident:ident@$subpattern:pat = $future:expr, if $condition:expr => $body:block, $($token:tt)*)
476        ($($count:tt)*)
477        ($($branch:tt)*)
478        $default:tt
479        $complete:tt
480        ; biased = $biased:expr
481    ) => {
482        $crate::select_internal!(
483            @list
484            ($($token)*)
485            ($($count)* _)
486            ($($branch)* [($($count)*), $subpattern] ref $ident@$subpattern = $future, if $condition => $body,)
487            $default
488            $complete
489            ; biased = $biased
490        )
491    };
492    (@list
493        (mut $ident:ident@$subpattern:pat = $future:expr, if $condition:expr => $body:block, $($token:tt)*)
494        ($($count:tt)*)
495        ($($branch:tt)*)
496        $default:tt
497        $complete:tt
498        ; biased = $biased:expr
499    ) => {
500        $crate::select_internal!(
501            @list
502            ($($token)*)
503            ($($count)* _)
504            ($($branch)* [($($count)*), $subpattern] mut $ident@$subpattern = $future, if $condition => $body,)
505            $default
506            $complete
507            ; biased = $biased
508        )
509    };
510    (@list
511        ($pattern:pat = $future:expr, if $condition:expr => $body:block, $($token:tt)*)
512        ($($count:tt)*)
513        ($($branch:tt)*)
514        $default:tt
515        $complete:tt
516        ; biased = $biased:expr
517    ) => {
518        $crate::select_internal!(
519            @list
520            ($($token)*)
521            ($($count)* _)
522            ($($branch)* [($($count)*), $pattern] $pattern = $future, if $condition => $body,)
523            $default
524            $complete
525            ; biased = $biased
526        )
527    };
528    (@list
529        (ref mut $ident:ident@$subpattern:pat = $future:expr => $body:block, $($token:tt)*)
530        ($($count:tt)*)
531        ($($branch:tt)*)
532        $default:tt
533        $complete:tt
534        ; biased = $biased:expr
535    ) => {
536        $crate::select_internal!(
537            @list
538            ($($token)*)
539            ($($count)* _)
540            ($($branch)* [($($count)*), $subpattern] ref mut $ident@$subpattern = $future, if true => $body,)
541            $default
542            $complete
543            ; biased = $biased
544        )
545    };
546    (@list
547        (ref $ident:ident@$subpattern:pat = $future:expr => $body:block, $($token:tt)*)
548        ($($count:tt)*)
549        ($($branch:tt)*)
550        $default:tt
551        $complete:tt
552        ; biased = $biased:expr
553    ) => {
554        $crate::select_internal!(
555            @list
556            ($($token)*)
557            ($($count)* _)
558            ($($branch)* [($($count)*), $subpattern] ref $ident@$subpattern = $future, if true => $body,)
559            $default
560            $complete
561            ; biased = $biased
562        )
563    };
564    (@list
565        (mut $ident:ident@$subpattern:pat = $future:expr => $body:block, $($token:tt)*)
566        ($($count:tt)*)
567        ($($branch:tt)*)
568        $default:tt
569        $complete:tt
570        ; biased = $biased:expr
571    ) => {
572        $crate::select_internal!(
573            @list
574            ($($token)*)
575            ($($count)* _)
576            ($($branch)* [($($count)*), $subpattern] mut $ident@$subpattern = $future, if true => $body,)
577            $default
578            $complete
579            ; biased = $biased
580        )
581    };
582    (@list
583        ($pattern:pat = $future:expr => $body:block, $($token:tt)*)
584        ($($count:tt)*)
585        ($($branch:tt)*)
586        $default:tt
587        $complete:tt
588        ; biased = $biased:expr
589        ) => {
590        $crate::select_internal!(
591            @list
592            ($($token)*)
593            ($($count)* _)
594            ($($branch)* [($($count)*), $pattern] $pattern = $future, if true => $body,)
595            $default
596            $complete
597            ; biased = $biased
598        )
599    };
600
601    // block without trailing comma
602    (@list
603        (ref mut $ident:ident@$subpattern:pat = $future:expr, if $condition:expr => $body:block $($token:tt)*)
604        ($($count:tt)*)
605        ($($branch:tt)*)
606        $default:tt
607        $complete:tt
608        ; biased = $biased:expr
609    ) => {
610        $crate::select_internal!(
611            @list
612            ($($token)*)
613            ($($count)* _)
614            ($($branch)* [($($count)*), $subpattern] ref mut $ident@$subpattern = $future, if $condition => $body,)
615            $default
616            $complete
617            ; biased = $biased
618        )
619    };
620    (@list
621        (ref $ident:ident@$subpattern:pat = $future:expr, if $condition:expr => $body:block $($token:tt)*)
622        ($($count:tt)*)
623        ($($branch:tt)*)
624        $default:tt
625        $complete:tt
626        ; biased = $biased:expr
627    ) => {
628        $crate::select_internal!(
629            @list
630            ($($token)*)
631            ($($count)* _)
632            ($($branch)* [($($count)*), $subpattern] ref $ident@$subpattern = $future, if $condition => $body,)
633            $default
634            $complete
635            ; biased = $biased
636        )
637    };
638    (@list
639        (mut $ident:ident@$subpattern:pat = $future:expr, if $condition:expr => $body:block $($token:tt)*)
640        ($($count:tt)*)
641        ($($branch:tt)*)
642        $default:tt
643        $complete:tt
644        ; biased = $biased:expr
645    ) => {
646        $crate::select_internal!(
647            @list
648            ($($token)*)
649            ($($count)* _)
650            ($($branch)* [($($count)*), $subpattern] mut $ident@$subpattern = $future, if $condition => $body,)
651            $default
652            $complete
653            ; biased = $biased
654        )
655    };
656    (@list
657        ($pattern:pat = $future:expr, if $condition:expr => $body:block $($token:tt)*)
658        ($($count:tt)*)
659        ($($branch:tt)*)
660        $default:tt
661        $complete:tt
662        ; biased = $biased:expr
663    ) => {
664        $crate::select_internal!(
665            @list
666            ($($token)*)
667            ($($count)* _)
668            ($($branch)* [($($count)*), $pattern] $pattern = $future, if $condition => $body,)
669            $default
670            $complete
671            ; biased = $biased
672        )
673    };
674    (@list
675        (ref mut $ident:ident@$subpattern:pat = $future:expr => $body:block $($token:tt)*)
676        ($($count:tt)*)
677        ($($branch:tt)*)
678        $default:tt
679        $complete:tt
680        ; biased = $biased:expr
681    ) => {
682        $crate::select_internal!(
683            @list
684            ($($token)*)
685            ($($count)* _)
686            ($($branch)* [($($count)*), $subpattern] ref mut $ident@$subpattern = $future, if true => $body,)
687            $default
688            $complete
689            ; biased = $biased
690        )
691    };
692    (@list
693        (ref $ident:ident@$subpattern:pat = $future:expr => $body:block $($token:tt)*)
694        ($($count:tt)*)
695        ($($branch:tt)*)
696        $default:tt
697        $complete:tt
698        ; biased = $biased:expr
699    ) => {
700        $crate::select_internal!(
701            @list
702            ($($token)*)
703            ($($count)* _)
704            ($($branch)* [($($count)*), $subpattern] ref $ident@$subpattern = $future, if true => $body,)
705            $default
706            $complete
707            ; biased = $biased
708        )
709    };
710    (@list
711        (mut $ident:ident@$subpattern:pat = $future:expr => $body:block $($token:tt)*)
712        ($($count:tt)*)
713        ($($branch:tt)*)
714        $default:tt
715        $complete:tt
716        ; biased = $biased:expr
717    ) => {
718        $crate::select_internal!(
719            @list
720            ($($token)*)
721            ($($count)* _)
722            ($($branch)* [($($count)*), $subpattern] mut $ident@$subpattern = $future, if true => $body,)
723            $default
724            $complete
725            ; biased = $biased
726        )
727    };
728    (@list
729        ($pattern:pat = $future:expr => $body:block $($token:tt)*)
730        ($($count:tt)*)
731        ($($branch:tt)*)
732        $default:tt
733        $complete:tt
734        ; biased = $biased:expr
735    ) => {
736        $crate::select_internal!(
737            @list
738            ($($token)*)
739            ($($count)* _)
740            ($($branch)* [($($count)*), $pattern] $pattern = $future, if true => $body,)
741            $default
742            $complete
743            ; biased = $biased
744        )
745    };
746
747    // expression without a trailing comma in last clause
748    (@list
749        (ref mut $ident:ident@$subpattern:pat = $future:expr, if $condition:expr => $body:expr)
750        ($($count:tt)*)
751        ($($branch:tt)*)
752        $default:tt
753        $complete:tt
754        ; biased = $biased:expr
755    ) => {
756        $crate::select_internal!(
757            @list
758            ()
759            ($($count)* _)
760            ($($branch)* [($($count)*), $subpattern] ref mut $ident@$subpattern = $future, if $condition => $body,)
761            $default
762            $complete
763            ; biased = $biased
764        )
765    };
766    (@list
767        (ref $ident:ident@$subpattern:pat = $future:expr, if $condition:expr => $body:expr)
768        ($($count:tt)*)
769        ($($branch:tt)*)
770        $default:tt
771        $complete:tt
772        ; biased = $biased:expr
773    ) => {
774        $crate::select_internal!(
775            @list
776            ()
777            ($($count)* _)
778            ($($branch)* [($($count)*), $subpattern] ref $ident@$subpattern = $future, if $condition => $body,)
779            $default
780            $complete
781            ; biased = $biased
782        )
783    };
784    (@list
785        (mut $ident:ident@$subpattern:pat = $future:expr, if $condition:expr => $body:expr)
786        ($($count:tt)*)
787        ($($branch:tt)*)
788        $default:tt
789        $complete:tt
790        ; biased = $biased:expr
791    ) => {
792        $crate::select_internal!(
793            @list
794            ()
795            ($($count)* _)
796            ($($branch)* [($($count)*), $subpattern] mut $ident@$subpattern = $future, if $condition => $body,)
797            $default
798            $complete
799            ; biased = $biased
800        )
801    };
802    (@list
803        ($pattern:pat = $future:expr, if $condition:expr => $body:expr)
804        ($($count:tt)*)
805        ($($branch:tt)*)
806        $default:tt
807        $complete:tt
808        ; biased = $biased:expr
809    ) => {
810        $crate::select_internal!(
811            @list
812            ()
813            ($($count)* _)
814            ($($branch)* [($($count)*), $pattern] $pattern = $future, if $condition => $body,)
815            $default
816            $complete
817            ; biased = $biased
818        )
819    };
820    (@list
821        (ref mut $ident:ident@$subpattern:pat = $future:expr => $body:expr)
822        ($($count:tt)*)
823        ($($branch:tt)*)
824        $default:tt
825        $complete:tt
826        ; biased = $biased:expr
827    ) => {
828        $crate::select_internal!(
829            @list
830            ()
831            ($($count)* _)
832            ($($branch)* [($($count)*), $subpattern] ref mut $ident@$subpattern = $future, if true => $body,)
833            $default
834            $complete
835            ; biased = $biased
836        )
837    };
838    (@list
839        (ref $ident:ident@$subpattern:pat = $future:expr => $body:expr)
840        ($($count:tt)*)
841        ($($branch:tt)*)
842        $default:tt
843        $complete:tt
844        ; biased = $biased:expr
845    ) => {
846        $crate::select_internal!(
847            @list
848            ()
849            ($($count)* _)
850            ($($branch)* [($($count)*), $subpattern] ref $ident@$subpattern = $future, if true => $body,)
851            $default
852            $complete
853            ; biased = $biased
854        )
855    };
856    (@list
857        (mut $ident:ident@$subpattern:pat = $future:expr => $body:expr)
858        ($($count:tt)*)
859        ($($branch:tt)*)
860        $default:tt
861        $complete:tt
862        ; biased = $biased:expr
863    ) => {
864        $crate::select_internal!(
865            @list
866            ()
867            ($($count)* _)
868            ($($branch)* [($($count)*), $subpattern] mut $ident@$subpattern = $future, if true => $body,)
869            $default
870            $complete
871            ; biased = $biased
872        )
873    };
874    (@list
875        ($pattern:pat = $future:expr => $body:expr)
876        ($($count:tt)*)
877        ($($branch:tt)*)
878        $default:tt
879        $complete:tt
880        ; biased = $biased:expr
881    ) => {
882        $crate::select_internal!(
883            @list
884            ()
885            ($($count)* _)
886            ($($branch)* [($($count)*), $pattern] $pattern = $future, if true => $body,)
887            $default
888            $complete
889            ; biased = $biased
890        )
891    };
892
893
894    // expression with a trailing comma
895    (@list
896        (ref mut $ident:ident@$subpattern:pat = $future:expr, if $condition:expr => $body:expr, $($token:tt)*)
897        ($($count:tt)*)
898        ($($branch:tt)*)
899        $default:tt
900        $complete:tt
901        ; biased = $biased:expr
902    ) => {
903        $crate::select_internal!(
904            @list
905            ($($token)*)
906            ($($count)* _)
907            ($($branch)* [($($count)*), $subpattern] ref mut $ident@$subpattern = $future, if $condition => $body,)
908            $default
909            $complete
910            ; biased = $biased
911        )
912    };
913    (@list
914        (ref $ident:ident@$subpattern:pat = $future:expr, if $condition:expr => $body:expr, $($token:tt)*)
915        ($($count:tt)*)
916        ($($branch:tt)*)
917        $default:tt
918        $complete:tt
919        ; biased = $biased:expr
920    ) => {
921        $crate::select_internal!(
922            @list
923            ($($token)*)
924            ($($count)* _)
925            ($($branch)* [($($count)*), $subpattern] ref $ident@$subpattern = $future, if $condition => $body,)
926            $default
927            $complete
928            ; biased = $biased
929        )
930    };
931    (@list
932        (mut $ident:ident@$subpattern:pat = $future:expr, if $condition:expr => $body:expr, $($token:tt)*)
933        ($($count:tt)*)
934        ($($branch:tt)*)
935        $default:tt
936        $complete:tt
937        ; biased = $biased:expr
938    ) => {
939        $crate::select_internal!(
940            @list
941            ($($token)*)
942            ($($count)* _)
943            ($($branch)* [($($count)*), $subpattern] mut $ident@$subpattern = $future, if $condition => $body,)
944            $default
945            $complete
946            ; biased = $biased
947        )
948    };
949    (@list
950        ($pattern:pat = $future:expr, if $condition:expr => $body:expr, $($token:tt)*)
951        ($($count:tt)*)
952        ($($branch:tt)*)
953        $default:tt
954        $complete:tt
955        ; biased = $biased:expr
956    ) => {
957        $crate::select_internal!(
958            @list
959            ($($token)*)
960            ($($count)* _)
961            ($($branch)* [($($count)*), $pattern] $pattern = $future, if $condition => $body,)
962            $default
963            $complete
964            ; biased = $biased
965        )
966    };
967    (@list
968        (ref mut $ident:ident@$subpattern:pat = $future:expr => $body:expr, $($token:tt)*)
969        ($($count:tt)*)
970        ($($branch:tt)*)
971        $default:tt
972        $complete:tt
973        ; biased = $biased:expr
974    ) => {
975        $crate::select_internal!(
976            @list
977            ($($token)*)
978            ($($count)* _)
979            ($($branch)* [($($count)*), $subpattern] ref mut $ident@$subpattern = $future, if true => $body,)
980            $default
981            $complete
982            ; biased = $biased
983        )
984    };
985    (@list
986        (ref $ident:ident@$subpattern:pat = $future:expr => $body:expr, $($token:tt)*)
987        ($($count:tt)*)
988        ($($branch:tt)*)
989        $default:tt
990        $complete:tt
991        ; biased = $biased:expr
992    ) => {
993        $crate::select_internal!(
994            @list
995            ($($token)*)
996            ($($count)* _)
997            ($($branch)* [($($count)*), $subpattern] ref $ident@$subpattern = $future, if true => $body,)
998            $default
999            $complete
1000            ; biased = $biased
1001        )
1002    };
1003    (@list
1004        (mut $ident:ident@$subpattern:pat = $future:expr => $body:expr, $($token:tt)*)
1005        ($($count:tt)*)
1006        ($($branch:tt)*)
1007        $default:tt
1008        $complete:tt
1009        ; biased = $biased:expr
1010    ) => {
1011        $crate::select_internal!(
1012            @list
1013            ($($token)*)
1014            ($($count)* _)
1015            ($($branch)* [($($count)*), $subpattern] mut $ident@$subpattern = $future, if true => $body,)
1016            $default
1017            $complete
1018            ; biased = $biased
1019        )
1020    };
1021    (@list
1022        ($pattern:pat = $future:expr => $body:expr, $($token:tt)*)
1023        ($($count:tt)*)
1024        ($($branch:tt)*)
1025        $default:tt
1026        $complete:tt
1027        ; biased = $biased:expr
1028    ) => {
1029        $crate::select_internal!(
1030            @list
1031            ($($token)*)
1032            ($($count)* _)
1033            ($($branch)* [($($count)*), $pattern] $pattern = $future, if true => $body,)
1034            $default
1035            $complete
1036            ; biased = $biased
1037        )
1038    };
1039
1040    // complain missing comma.
1041    (@list
1042        ($pattern:pat = $future:expr $(, if condition:expr)? => $($token:tt)*)
1043        $count:tt
1044        $branches:tt
1045        $default:tt
1046        $complete:tt
1047        ; biased = $biased:expr
1048    ) => {
1049        $crate::select_internal!(@missing-comma concat!("clause \"", stringify!($pattern = $future), "\""));
1050    };
1051
1052
1053    (@list
1054        $tokens:tt
1055        $count:tt
1056        $branches:tt
1057        $default:tt
1058        $complete:tt
1059        ; biased = $biased:expr
1060    ) => {
1061        compile_error!(concat!("fail to list select: ", stringify!($tokens)))
1062    };
1063
1064    (@none $_:tt) => { ::core::option::Option::None };
1065
1066    // Init select.
1067    (@poll
1068        non_blocking = $non_blocking:expr,
1069        when_completed = $when_completed:expr,
1070        count = $count:tt,
1071        branches = ($([$index:tt, $capture:pat] $pattern:pat = $future:expr, if $condition:expr => $evaluation:expr,)+),
1072        default = $default:expr,
1073        complete = $complete:expr
1074        ; biased = $biased:expr
1075    ) => {{
1076        const BRANCHES: usize = $crate::select_internal!(@count $count);
1077        const COMPLETED: u64 = if BRANCHES == 64 { u64::MAX } else { (1u64 << BRANCHES) - 1 };
1078        $crate::select_internal!(@output-type $count);
1079        let mut output = {
1080            // Scope to drop before call evaluation code.
1081            let mut __select_futures = ( $($crate::select_internal!(@none $index) ,)* );
1082            let mut __select_futures = &mut __select_futures;
1083            $(
1084                if $condition {
1085                    $crate::select_internal!(@assign $index, __select_futures, Some($future));
1086                }
1087            )*
1088            let start = if $biased {
1089                0
1090            } else {
1091                let stack_addr = 0usize;
1092                (&stack_addr as *const usize as usize) >> 3
1093            };
1094            ::core::future::poll_fn(|cx| {
1095                let mut completions = 0;
1096                for i in 0..BRANCHES {
1097                    let branch = (start + i) % BRANCHES;
1098                    match branch {
1099                        $(
1100                            $crate::select_internal!(@count $index) => {
1101                                let Some(future) = &mut $crate::select_internal!(@access $index, __select_futures) else {
1102                                    completions |= 1 << $crate::select_internal!(@count $index);
1103                                    continue;
1104                                };
1105                                #[allow(unused_unsafe)]
1106                                let future = unsafe { ::core::pin::Pin::new_unchecked(future) };
1107                                let mut output = match ::core::future::Future::poll(future, cx) {
1108                                    ::core::task::Poll::Ready(output) => output,
1109                                    ::core::task::Poll::Pending => continue,
1110                                };
1111                                $crate::select_internal!(@assign $index, __select_futures, ::core::option::Option::None);
1112                                completions |= 1 << $crate::select_internal!(@count $index);
1113                                #[allow(unreachable_patterns)]
1114                                #[allow(unused_variables)]
1115                                match &mut output {
1116                                    $capture => {},
1117                                    _  => continue,
1118                                };
1119                                return ::core::task::Poll::Ready($crate::select_internal!(@wrap $index, output));
1120                            }
1121                         )*
1122                        _ => unreachable!("select! encounter mismatch branch in polling"),
1123                    }
1124                }
1125                if completions == COMPLETED && ($when_completed || !$non_blocking) {
1126                    return ::core::task::Poll::Ready(__SelectOutput::Completed);
1127                }
1128                if $non_blocking {
1129                    return ::core::task::Poll::Ready(__SelectOutput::WouldBlock);
1130                }
1131                ::core::task::Poll::Pending
1132            }).await
1133        };
1134        match output {
1135            $(
1136                $crate::select_internal!(@unwrap $index, $pattern) => $evaluation,
1137             )*
1138            __SelectOutput::Completed => $complete,
1139            __SelectOutput::WouldBlock => $default,
1140            #[allow(unreachable_patterns)]
1141            _ => unreachable!("select! fail to pattern match"),
1142        }
1143    }};
1144
1145    (@missing-comma $msg:expr) => {
1146        compile_error!(concat!("`,` is required for expression in not last branch, non in ", $msg))
1147    };
1148
1149    (@too-many-branches) => {
1150        compile_error!("too many branches, at most 64")
1151    };
1152
1153    (@no-branch {
1154        default: (),
1155        complete: (),
1156    }) => {
1157        compile_error!("`select!`: no branch")
1158    };
1159
1160    (@no-branch {
1161        default: (),
1162        complete: ($complete:tt),
1163    }) => {
1164        compile_error!("`select!`: no branch except `complete`")
1165    };
1166
1167    (@no-branch {
1168        default: ($default:tt),
1169        complete: (),
1170    }) => {
1171        compile_error!("`select!`: no branch except `default`")
1172    };
1173
1174    (@no-branch {
1175        default: ($default:tt),
1176        complete: ($complete:tt),
1177    }) => {
1178        compile_error!("no branch except `default` and `complete`")
1179    };
1180
1181    (@count ()) => { 0 };
1182    (@count (_)) => { 1 };
1183    (@count (_ _)) => { 2 };
1184    (@count (_ _ _)) => { 3 };
1185    (@count (_ _ _ _)) => { 4 };
1186    (@count (_ _ _ _ _)) => { 5 };
1187    (@count (_ _ _ _ _ _)) => { 6 };
1188    (@count (_ _ _ _ _ _ _)) => { 7 };
1189    (@count (_ _ _ _ _ _ _ _)) => { 8 };
1190    (@count (_ _ _ _ _ _ _ _ _)) => { 9 };
1191    (@count (_ _ _ _ _ _ _ _ _ _)) => { 10 };
1192    (@count (_ _ _ _ _ _ _ _ _ _ _)) => { 11 };
1193    (@count (_ _ _ _ _ _ _ _ _ _ _ _)) => { 12 };
1194    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _)) => { 13 };
1195    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 14 };
1196    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 15 };
1197    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 16 };
1198    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 17 };
1199    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 18 };
1200    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 19 };
1201    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 20 };
1202    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 21 };
1203    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 22 };
1204    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 23 };
1205    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 24 };
1206    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 25 };
1207    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 26 };
1208    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 27 };
1209    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 28 };
1210    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 29 };
1211    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 30 };
1212    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 31 };
1213    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 32 };
1214    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 33 };
1215    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 34 };
1216    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 35 };
1217    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 36 };
1218    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 37 };
1219    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 38 };
1220    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 39 };
1221    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 40 };
1222    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 41 };
1223    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 42 };
1224    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 43 };
1225    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 44 };
1226    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 45 };
1227    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 46 };
1228    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 47 };
1229    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 48 };
1230    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 49 };
1231    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 50 };
1232    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 51 };
1233    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 52 };
1234    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 53 };
1235    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 54 };
1236    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 55 };
1237    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 56 };
1238    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 57 };
1239    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 58 };
1240    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 59 };
1241    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 60 };
1242    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 61 };
1243    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 62 };
1244    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 63 };
1245    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => { 64 };
1246    (@count (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ $($_:pat)*)) => {
1247        $crate::select_internal!(@too-many-branches)
1248    };
1249
1250    (@access (), $futures:ident) => { $futures.0 };
1251    (@access (_), $futures:ident) => { $futures.1 };
1252    (@access (_ _), $futures:ident) => { $futures.2 };
1253    (@access (_ _ _), $futures:ident) => { $futures.3 };
1254    (@access (_ _ _ _), $futures:ident) => { $futures.4 };
1255    (@access (_ _ _ _ _), $futures:ident) => { $futures.5 };
1256    (@access (_ _ _ _ _ _), $futures:ident) => { $futures.6 };
1257    (@access (_ _ _ _ _ _ _), $futures:ident) => { $futures.7 };
1258    (@access (_ _ _ _ _ _ _ _), $futures:ident) => { $futures.8 };
1259    (@access (_ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.9 };
1260    (@access (_ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.10 };
1261    (@access (_ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.11 };
1262    (@access (_ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.12 };
1263    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.13 };
1264    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.14 };
1265    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.15 };
1266    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.16 };
1267    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.17 };
1268    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.18 };
1269    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.19 };
1270    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.20 };
1271    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.21 };
1272    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.22 };
1273    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.23 };
1274    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.24 };
1275    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.25 };
1276    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.26 };
1277    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.27 };
1278    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.28 };
1279    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.29 };
1280    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.30 };
1281    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.31 };
1282    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.32 };
1283    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.33 };
1284    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.34 };
1285    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.35 };
1286    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.36 };
1287    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.37 };
1288    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.38 };
1289    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.39 };
1290    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.40 };
1291    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.41 };
1292    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.42 };
1293    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.43 };
1294    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.44 };
1295    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.45 };
1296    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.46 };
1297    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.47 };
1298    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.48 };
1299    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.49 };
1300    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.50 };
1301    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.51 };
1302    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.52 };
1303    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.53 };
1304    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.54 };
1305    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.55 };
1306    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.56 };
1307    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.57 };
1308    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.58 };
1309    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.59 };
1310    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.60 };
1311    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.61 };
1312    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.62 };
1313    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident) => { $futures.63 };
1314    (@access (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ $($_:pat)*) $($_2:tt)*) => {
1315        $crate::select_internal!(@too-many-branches)
1316    };
1317
1318    (@assign (), $futures:ident, $future:expr) => { $futures.0 = $future; };
1319    (@assign (_), $futures:ident, $future:expr) => { $futures.1 = $future; };
1320    (@assign (_ _), $futures:ident, $future:expr) => { $futures.2 = $future; };
1321    (@assign (_ _ _), $futures:ident, $future:expr) => { $futures.3 = $future; };
1322    (@assign (_ _ _ _), $futures:ident, $future:expr) => { $futures.4 = $future; };
1323    (@assign (_ _ _ _ _), $futures:ident, $future:expr) => { $futures.5 = $future; };
1324    (@assign (_ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.6 = $future; };
1325    (@assign (_ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.7 = $future; };
1326    (@assign (_ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.8 = $future; };
1327    (@assign (_ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.9 = $future; };
1328    (@assign (_ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.10 = $future; };
1329    (@assign (_ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.11 = $future; };
1330    (@assign (_ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.12 = $future; };
1331    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.13 = $future; };
1332    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.14 = $future; };
1333    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.15 = $future; };
1334    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.16 = $future; };
1335    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.17 = $future; };
1336    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.18 = $future; };
1337    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.19 = $future; };
1338    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.20 = $future; };
1339    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.21 = $future; };
1340    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.22 = $future; };
1341    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.23 = $future; };
1342    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.24 = $future; };
1343    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.25 = $future; };
1344    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.26 = $future; };
1345    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.27 = $future; };
1346    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.28 = $future; };
1347    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.29 = $future; };
1348    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.30 = $future; };
1349    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.31 = $future; };
1350    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.32 = $future; };
1351    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.33 = $future; };
1352    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.34 = $future; };
1353    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.35 = $future; };
1354    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.36 = $future; };
1355    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.37 = $future; };
1356    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.38 = $future; };
1357    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.39 = $future; };
1358    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.40 = $future; };
1359    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.41 = $future; };
1360    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.42 = $future; };
1361    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.43 = $future; };
1362    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.44 = $future; };
1363    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.45 = $future; };
1364    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.46 = $future; };
1365    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.47 = $future; };
1366    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.48 = $future; };
1367    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.49 = $future; };
1368    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.50 = $future; };
1369    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.51 = $future; };
1370    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.52 = $future; };
1371    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.53 = $future; };
1372    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.54 = $future; };
1373    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.55 = $future; };
1374    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.56 = $future; };
1375    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.57 = $future; };
1376    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.58 = $future; };
1377    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.59 = $future; };
1378    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.60 = $future; };
1379    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.61 = $future; };
1380    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.62 = $future; };
1381    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $futures:ident, $future:expr) => { $futures.63 = $future; };
1382    (@assign (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ $($_:pat)*) $($_2:tt)*) => {
1383        $crate::select_internal!(@too-many-branches)
1384    };
1385
1386    (@wrap (), $name:ident) => { __SelectOutput::_0($name) };
1387    (@wrap (_), $name:ident) => { __SelectOutput::_1($name) };
1388    (@wrap (_ _), $name:ident) => { __SelectOutput::_2($name) };
1389    (@wrap (_ _ _), $name:ident) => { __SelectOutput::_3($name) };
1390    (@wrap (_ _ _ _), $name:ident) => { __SelectOutput::_4($name) };
1391    (@wrap (_ _ _ _ _), $name:ident) => { __SelectOutput::_5($name) };
1392    (@wrap (_ _ _ _ _ _), $name:ident) => { __SelectOutput::_6($name) };
1393    (@wrap (_ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_7($name) };
1394    (@wrap (_ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_8($name) };
1395    (@wrap (_ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_9($name) };
1396    (@wrap (_ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_10($name) };
1397    (@wrap (_ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_11($name) };
1398    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_12($name) };
1399    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_13($name) };
1400    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_14($name) };
1401    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_15($name) };
1402    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_16($name) };
1403    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_17($name) };
1404    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_18($name) };
1405    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_19($name) };
1406    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_20($name) };
1407    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_21($name) };
1408    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_22($name) };
1409    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_23($name) };
1410    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_24($name) };
1411    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_25($name) };
1412    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_26($name) };
1413    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_27($name) };
1414    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_28($name) };
1415    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_29($name) };
1416    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_30($name) };
1417    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_31($name) };
1418    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_32($name) };
1419    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_33($name) };
1420    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_34($name) };
1421    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_35($name) };
1422    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_36($name) };
1423    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_37($name) };
1424    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_38($name) };
1425    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_39($name) };
1426    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_40($name) };
1427    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_41($name) };
1428    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_42($name) };
1429    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_43($name) };
1430    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_44($name) };
1431    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_45($name) };
1432    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_46($name) };
1433    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_47($name) };
1434    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_48($name) };
1435    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_49($name) };
1436    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_50($name) };
1437    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_51($name) };
1438    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_52($name) };
1439    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_53($name) };
1440    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_54($name) };
1441    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_55($name) };
1442    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_56($name) };
1443    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_57($name) };
1444    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_58($name) };
1445    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_59($name) };
1446    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_60($name) };
1447    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_61($name) };
1448    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_62($name) };
1449    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $name:ident) => { __SelectOutput::_63($name) };
1450    (@wrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ $($_:pat)*) $($_2:tt)*) => {
1451        $crate::select_internal!(@too-many-branches)
1452    };
1453
1454    (@unwrap (), $pattern:pat) => { __SelectOutput::_0($pattern) };
1455    (@unwrap (_), $pattern:pat) => { __SelectOutput::_1($pattern) };
1456    (@unwrap (_ _), $pattern:pat) => { __SelectOutput::_2($pattern) };
1457    (@unwrap (_ _ _), $pattern:pat) => { __SelectOutput::_3($pattern) };
1458    (@unwrap (_ _ _ _), $pattern:pat) => { __SelectOutput::_4($pattern) };
1459    (@unwrap (_ _ _ _ _), $pattern:pat) => { __SelectOutput::_5($pattern) };
1460    (@unwrap (_ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_6($pattern) };
1461    (@unwrap (_ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_7($pattern) };
1462    (@unwrap (_ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_8($pattern) };
1463    (@unwrap (_ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_9($pattern) };
1464    (@unwrap (_ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_10($pattern) };
1465    (@unwrap (_ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_11($pattern) };
1466    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_12($pattern) };
1467    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_13($pattern) };
1468    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_14($pattern) };
1469    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_15($pattern) };
1470    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_16($pattern) };
1471    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_17($pattern) };
1472    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_18($pattern) };
1473    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_19($pattern) };
1474    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_20($pattern) };
1475    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_21($pattern) };
1476    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_22($pattern) };
1477    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_23($pattern) };
1478    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_24($pattern) };
1479    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_25($pattern) };
1480    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_26($pattern) };
1481    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_27($pattern) };
1482    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_28($pattern) };
1483    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_29($pattern) };
1484    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_30($pattern) };
1485    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_31($pattern) };
1486    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_32($pattern) };
1487    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_33($pattern) };
1488    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_34($pattern) };
1489    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_35($pattern) };
1490    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_36($pattern) };
1491    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_37($pattern) };
1492    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_38($pattern) };
1493    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_39($pattern) };
1494    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_40($pattern) };
1495    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_41($pattern) };
1496    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_42($pattern) };
1497    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_43($pattern) };
1498    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_44($pattern) };
1499    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_45($pattern) };
1500    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_46($pattern) };
1501    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_47($pattern) };
1502    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_48($pattern) };
1503    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_49($pattern) };
1504    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_50($pattern) };
1505    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_51($pattern) };
1506    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_52($pattern) };
1507    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_53($pattern) };
1508    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_54($pattern) };
1509    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_55($pattern) };
1510    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_56($pattern) };
1511    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_57($pattern) };
1512    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_58($pattern) };
1513    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_59($pattern) };
1514    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_60($pattern) };
1515    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_61($pattern) };
1516    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_62($pattern) };
1517    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _), $pattern:pat) => { __SelectOutput::_63($pattern) };
1518    (@unwrap (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ $($_:pat)*) $($_2:tt)*) => {
1519        $crate::select_internal!(@too-many-branches)
1520    };
1521
1522    (@output-type (_)) => {
1523        enum __SelectOutput<_0> {
1524            Completed,
1525            WouldBlock,
1526            _0(_0),
1527        }
1528    };
1529    (@output-type (_ _)) => {
1530        enum __SelectOutput<_0, _1> {
1531            Completed,
1532            WouldBlock,
1533            _0(_0),
1534            _1(_1),
1535        }
1536    };
1537    (@output-type (_ _ _)) => {
1538        enum __SelectOutput<_0, _1, _2> {
1539            Completed,
1540            WouldBlock,
1541            _0(_0),
1542            _1(_1),
1543            _2(_2),
1544        }
1545    };
1546    (@output-type (_ _ _ _)) => {
1547        enum __SelectOutput<T0, T1, T2, T3> {
1548            Completed,
1549            WouldBlock,
1550            _0(T0),
1551            _1(T1),
1552            _2(T2),
1553            _3(T3),
1554        }
1555    };
1556    (@output-type (_ _ _ _ _)) => {
1557        enum __SelectOutput<T0, T1, T2, T3, T4> {
1558            Completed,
1559            WouldBlock,
1560            _0(T0),
1561            _1(T1),
1562            _2(T2),
1563            _3(T3),
1564            _4(T4),
1565        }
1566    };
1567    (@output-type (_ _ _ _ _ _)) => {
1568        enum __SelectOutput<T0, T1, T2, T3, T4, T5> {
1569            Completed,
1570            WouldBlock,
1571            _0(T0),
1572            _1(T1),
1573            _2(T2),
1574            _3(T3),
1575            _4(T4),
1576            _5(T5),
1577        }
1578    };
1579    (@output-type (_ _ _ _ _ _ _)) => {
1580        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6> {
1581            Completed,
1582            WouldBlock,
1583            _0(T0),
1584            _1(T1),
1585            _2(T2),
1586            _3(T3),
1587            _4(T4),
1588            _5(T5),
1589            _6(T6),
1590        }
1591    };
1592    (@output-type (_ _ _ _ _ _ _ _)) => {
1593        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7> {
1594            Completed,
1595            WouldBlock,
1596            _0(T0),
1597            _1(T1),
1598            _2(T2),
1599            _3(T3),
1600            _4(T4),
1601            _5(T5),
1602            _6(T6),
1603            _7(T7),
1604        }
1605    };
1606    (@output-type (_ _ _ _ _ _ _ _ _)) => {
1607        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8> {
1608            Completed,
1609            WouldBlock,
1610            _0(T0),
1611            _1(T1),
1612            _2(T2),
1613            _3(T3),
1614            _4(T4),
1615            _5(T5),
1616            _6(T6),
1617            _7(T7),
1618            _8(T8),
1619        }
1620    };
1621    (@output-type (_ _ _ _ _ _ _ _ _ _)) => {
1622        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> {
1623            Completed,
1624            WouldBlock,
1625            _0(T0),
1626            _1(T1),
1627            _2(T2),
1628            _3(T3),
1629            _4(T4),
1630            _5(T5),
1631            _6(T6),
1632            _7(T7),
1633            _8(T8),
1634            _9(T9),
1635        }
1636    };
1637    (@output-type (_ _ _ _ _ _ _ _ _ _ _)) => {
1638        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> {
1639            Completed,
1640            WouldBlock,
1641            _0(T0),
1642            _1(T1),
1643            _2(T2),
1644            _3(T3),
1645            _4(T4),
1646            _5(T5),
1647            _6(T6),
1648            _7(T7),
1649            _8(T8),
1650            _9(T9),
1651            _10(T10),
1652        }
1653    };
1654    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _)) => {
1655        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> {
1656            Completed,
1657            WouldBlock,
1658            _0(T0),
1659            _1(T1),
1660            _2(T2),
1661            _3(T3),
1662            _4(T4),
1663            _5(T5),
1664            _6(T6),
1665            _7(T7),
1666            _8(T8),
1667            _9(T9),
1668            _10(T10),
1669            _11(T11),
1670        }
1671    };
1672    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _)) => {
1673        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> {
1674            Completed,
1675            WouldBlock,
1676            _0(T0),
1677            _1(T1),
1678            _2(T2),
1679            _3(T3),
1680            _4(T4),
1681            _5(T5),
1682            _6(T6),
1683            _7(T7),
1684            _8(T8),
1685            _9(T9),
1686            _10(T10),
1687            _11(T11),
1688            _12(T12),
1689        }
1690    };
1691    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
1692        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> {
1693            Completed,
1694            WouldBlock,
1695            _0(T0),
1696            _1(T1),
1697            _2(T2),
1698            _3(T3),
1699            _4(T4),
1700            _5(T5),
1701            _6(T6),
1702            _7(T7),
1703            _8(T8),
1704            _9(T9),
1705            _10(T10),
1706            _11(T11),
1707            _12(T12),
1708            _13(T13),
1709        }
1710    };
1711    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
1712        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> {
1713            Completed,
1714            WouldBlock,
1715            _0(T0),
1716            _1(T1),
1717            _2(T2),
1718            _3(T3),
1719            _4(T4),
1720            _5(T5),
1721            _6(T6),
1722            _7(T7),
1723            _8(T8),
1724            _9(T9),
1725            _10(T10),
1726            _11(T11),
1727            _12(T12),
1728            _13(T13),
1729            _14(T14),
1730        }
1731    };
1732    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
1733        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> {
1734            Completed,
1735            WouldBlock,
1736            _0(T0),
1737            _1(T1),
1738            _2(T2),
1739            _3(T3),
1740            _4(T4),
1741            _5(T5),
1742            _6(T6),
1743            _7(T7),
1744            _8(T8),
1745            _9(T9),
1746            _10(T10),
1747            _11(T11),
1748            _12(T12),
1749            _13(T13),
1750            _14(T14),
1751            _15(T15),
1752        }
1753    };
1754    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
1755        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> {
1756            Completed,
1757            WouldBlock,
1758            _0(T0),
1759            _1(T1),
1760            _2(T2),
1761            _3(T3),
1762            _4(T4),
1763            _5(T5),
1764            _6(T6),
1765            _7(T7),
1766            _8(T8),
1767            _9(T9),
1768            _10(T10),
1769            _11(T11),
1770            _12(T12),
1771            _13(T13),
1772            _14(T14),
1773            _15(T15),
1774            _16(T16),
1775        }
1776    };
1777    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
1778        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17> {
1779            Completed,
1780            WouldBlock,
1781            _0(T0),
1782            _1(T1),
1783            _2(T2),
1784            _3(T3),
1785            _4(T4),
1786            _5(T5),
1787            _6(T6),
1788            _7(T7),
1789            _8(T8),
1790            _9(T9),
1791            _10(T10),
1792            _11(T11),
1793            _12(T12),
1794            _13(T13),
1795            _14(T14),
1796            _15(T15),
1797            _16(T16),
1798            _17(T17),
1799        }
1800    };
1801    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
1802        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> {
1803            Completed,
1804            WouldBlock,
1805            _0(T0),
1806            _1(T1),
1807            _2(T2),
1808            _3(T3),
1809            _4(T4),
1810            _5(T5),
1811            _6(T6),
1812            _7(T7),
1813            _8(T8),
1814            _9(T9),
1815            _10(T10),
1816            _11(T11),
1817            _12(T12),
1818            _13(T13),
1819            _14(T14),
1820            _15(T15),
1821            _16(T16),
1822            _17(T17),
1823            _18(T18),
1824        }
1825    };
1826    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
1827        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19> {
1828            Completed,
1829            WouldBlock,
1830            _0(T0),
1831            _1(T1),
1832            _2(T2),
1833            _3(T3),
1834            _4(T4),
1835            _5(T5),
1836            _6(T6),
1837            _7(T7),
1838            _8(T8),
1839            _9(T9),
1840            _10(T10),
1841            _11(T11),
1842            _12(T12),
1843            _13(T13),
1844            _14(T14),
1845            _15(T15),
1846            _16(T16),
1847            _17(T17),
1848            _18(T18),
1849            _19(T19),
1850        }
1851    };
1852    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
1853        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20> {
1854            Completed,
1855            WouldBlock,
1856            _0(T0),
1857            _1(T1),
1858            _2(T2),
1859            _3(T3),
1860            _4(T4),
1861            _5(T5),
1862            _6(T6),
1863            _7(T7),
1864            _8(T8),
1865            _9(T9),
1866            _10(T10),
1867            _11(T11),
1868            _12(T12),
1869            _13(T13),
1870            _14(T14),
1871            _15(T15),
1872            _16(T16),
1873            _17(T17),
1874            _18(T18),
1875            _19(T19),
1876            _20(T20),
1877        }
1878    };
1879    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
1880        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21> {
1881            Completed,
1882            WouldBlock,
1883            _0(T0),
1884            _1(T1),
1885            _2(T2),
1886            _3(T3),
1887            _4(T4),
1888            _5(T5),
1889            _6(T6),
1890            _7(T7),
1891            _8(T8),
1892            _9(T9),
1893            _10(T10),
1894            _11(T11),
1895            _12(T12),
1896            _13(T13),
1897            _14(T14),
1898            _15(T15),
1899            _16(T16),
1900            _17(T17),
1901            _18(T18),
1902            _19(T19),
1903            _20(T20),
1904            _21(T21),
1905        }
1906    };
1907    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
1908        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> {
1909            Completed,
1910            WouldBlock,
1911            _0(T0),
1912            _1(T1),
1913            _2(T2),
1914            _3(T3),
1915            _4(T4),
1916            _5(T5),
1917            _6(T6),
1918            _7(T7),
1919            _8(T8),
1920            _9(T9),
1921            _10(T10),
1922            _11(T11),
1923            _12(T12),
1924            _13(T13),
1925            _14(T14),
1926            _15(T15),
1927            _16(T16),
1928            _17(T17),
1929            _18(T18),
1930            _19(T19),
1931            _20(T20),
1932            _21(T21),
1933            _22(T22),
1934        }
1935    };
1936    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
1937        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> {
1938            Completed,
1939            WouldBlock,
1940            _0(T0),
1941            _1(T1),
1942            _2(T2),
1943            _3(T3),
1944            _4(T4),
1945            _5(T5),
1946            _6(T6),
1947            _7(T7),
1948            _8(T8),
1949            _9(T9),
1950            _10(T10),
1951            _11(T11),
1952            _12(T12),
1953            _13(T13),
1954            _14(T14),
1955            _15(T15),
1956            _16(T16),
1957            _17(T17),
1958            _18(T18),
1959            _19(T19),
1960            _20(T20),
1961            _21(T21),
1962            _22(T22),
1963            _23(T23),
1964        }
1965    };
1966    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
1967        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> {
1968            Completed,
1969            WouldBlock,
1970            _0(T0),
1971            _1(T1),
1972            _2(T2),
1973            _3(T3),
1974            _4(T4),
1975            _5(T5),
1976            _6(T6),
1977            _7(T7),
1978            _8(T8),
1979            _9(T9),
1980            _10(T10),
1981            _11(T11),
1982            _12(T12),
1983            _13(T13),
1984            _14(T14),
1985            _15(T15),
1986            _16(T16),
1987            _17(T17),
1988            _18(T18),
1989            _19(T19),
1990            _20(T20),
1991            _21(T21),
1992            _22(T22),
1993            _23(T23),
1994            _24(T24),
1995        }
1996    };
1997    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
1998        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> {
1999            Completed,
2000            WouldBlock,
2001            _0(T0),
2002            _1(T1),
2003            _2(T2),
2004            _3(T3),
2005            _4(T4),
2006            _5(T5),
2007            _6(T6),
2008            _7(T7),
2009            _8(T8),
2010            _9(T9),
2011            _10(T10),
2012            _11(T11),
2013            _12(T12),
2014            _13(T13),
2015            _14(T14),
2016            _15(T15),
2017            _16(T16),
2018            _17(T17),
2019            _18(T18),
2020            _19(T19),
2021            _20(T20),
2022            _21(T21),
2023            _22(T22),
2024            _23(T23),
2025            _24(T24),
2026            _25(T25),
2027        }
2028    };
2029    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2030        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> {
2031            Completed,
2032            WouldBlock,
2033            _0(T0),
2034            _1(T1),
2035            _2(T2),
2036            _3(T3),
2037            _4(T4),
2038            _5(T5),
2039            _6(T6),
2040            _7(T7),
2041            _8(T8),
2042            _9(T9),
2043            _10(T10),
2044            _11(T11),
2045            _12(T12),
2046            _13(T13),
2047            _14(T14),
2048            _15(T15),
2049            _16(T16),
2050            _17(T17),
2051            _18(T18),
2052            _19(T19),
2053            _20(T20),
2054            _21(T21),
2055            _22(T22),
2056            _23(T23),
2057            _24(T24),
2058            _25(T25),
2059            _26(T26),
2060        }
2061    };
2062    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2063        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> {
2064            Completed,
2065            WouldBlock,
2066            _0(T0),
2067            _1(T1),
2068            _2(T2),
2069            _3(T3),
2070            _4(T4),
2071            _5(T5),
2072            _6(T6),
2073            _7(T7),
2074            _8(T8),
2075            _9(T9),
2076            _10(T10),
2077            _11(T11),
2078            _12(T12),
2079            _13(T13),
2080            _14(T14),
2081            _15(T15),
2082            _16(T16),
2083            _17(T17),
2084            _18(T18),
2085            _19(T19),
2086            _20(T20),
2087            _21(T21),
2088            _22(T22),
2089            _23(T23),
2090            _24(T24),
2091            _25(T25),
2092            _26(T26),
2093            _27(T27),
2094        }
2095    };
2096    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2097        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28> {
2098            Completed,
2099            WouldBlock,
2100            _0(T0),
2101            _1(T1),
2102            _2(T2),
2103            _3(T3),
2104            _4(T4),
2105            _5(T5),
2106            _6(T6),
2107            _7(T7),
2108            _8(T8),
2109            _9(T9),
2110            _10(T10),
2111            _11(T11),
2112            _12(T12),
2113            _13(T13),
2114            _14(T14),
2115            _15(T15),
2116            _16(T16),
2117            _17(T17),
2118            _18(T18),
2119            _19(T19),
2120            _20(T20),
2121            _21(T21),
2122            _22(T22),
2123            _23(T23),
2124            _24(T24),
2125            _25(T25),
2126            _26(T26),
2127            _27(T27),
2128            _28(T28),
2129        }
2130    };
2131    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2132        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29> {
2133            Completed,
2134            WouldBlock,
2135            _0(T0),
2136            _1(T1),
2137            _2(T2),
2138            _3(T3),
2139            _4(T4),
2140            _5(T5),
2141            _6(T6),
2142            _7(T7),
2143            _8(T8),
2144            _9(T9),
2145            _10(T10),
2146            _11(T11),
2147            _12(T12),
2148            _13(T13),
2149            _14(T14),
2150            _15(T15),
2151            _16(T16),
2152            _17(T17),
2153            _18(T18),
2154            _19(T19),
2155            _20(T20),
2156            _21(T21),
2157            _22(T22),
2158            _23(T23),
2159            _24(T24),
2160            _25(T25),
2161            _26(T26),
2162            _27(T27),
2163            _28(T28),
2164            _29(T29),
2165        }
2166    };
2167    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2168        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30> {
2169            Completed,
2170            WouldBlock,
2171            _0(T0),
2172            _1(T1),
2173            _2(T2),
2174            _3(T3),
2175            _4(T4),
2176            _5(T5),
2177            _6(T6),
2178            _7(T7),
2179            _8(T8),
2180            _9(T9),
2181            _10(T10),
2182            _11(T11),
2183            _12(T12),
2184            _13(T13),
2185            _14(T14),
2186            _15(T15),
2187            _16(T16),
2188            _17(T17),
2189            _18(T18),
2190            _19(T19),
2191            _20(T20),
2192            _21(T21),
2193            _22(T22),
2194            _23(T23),
2195            _24(T24),
2196            _25(T25),
2197            _26(T26),
2198            _27(T27),
2199            _28(T28),
2200            _29(T29),
2201            _30(T30),
2202        }
2203    };
2204    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2205        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31> {
2206            Completed,
2207            WouldBlock,
2208            _0(T0),
2209            _1(T1),
2210            _2(T2),
2211            _3(T3),
2212            _4(T4),
2213            _5(T5),
2214            _6(T6),
2215            _7(T7),
2216            _8(T8),
2217            _9(T9),
2218            _10(T10),
2219            _11(T11),
2220            _12(T12),
2221            _13(T13),
2222            _14(T14),
2223            _15(T15),
2224            _16(T16),
2225            _17(T17),
2226            _18(T18),
2227            _19(T19),
2228            _20(T20),
2229            _21(T21),
2230            _22(T22),
2231            _23(T23),
2232            _24(T24),
2233            _25(T25),
2234            _26(T26),
2235            _27(T27),
2236            _28(T28),
2237            _29(T29),
2238            _30(T30),
2239            _31(T31),
2240        }
2241    };
2242    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2243        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32> {
2244            Completed,
2245            WouldBlock,
2246            _0(T0),
2247            _1(T1),
2248            _2(T2),
2249            _3(T3),
2250            _4(T4),
2251            _5(T5),
2252            _6(T6),
2253            _7(T7),
2254            _8(T8),
2255            _9(T9),
2256            _10(T10),
2257            _11(T11),
2258            _12(T12),
2259            _13(T13),
2260            _14(T14),
2261            _15(T15),
2262            _16(T16),
2263            _17(T17),
2264            _18(T18),
2265            _19(T19),
2266            _20(T20),
2267            _21(T21),
2268            _22(T22),
2269            _23(T23),
2270            _24(T24),
2271            _25(T25),
2272            _26(T26),
2273            _27(T27),
2274            _28(T28),
2275            _29(T29),
2276            _30(T30),
2277            _31(T31),
2278            _32(T32),
2279        }
2280    };
2281    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2282        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33> {
2283            Completed,
2284            WouldBlock,
2285            _0(T0),
2286            _1(T1),
2287            _2(T2),
2288            _3(T3),
2289            _4(T4),
2290            _5(T5),
2291            _6(T6),
2292            _7(T7),
2293            _8(T8),
2294            _9(T9),
2295            _10(T10),
2296            _11(T11),
2297            _12(T12),
2298            _13(T13),
2299            _14(T14),
2300            _15(T15),
2301            _16(T16),
2302            _17(T17),
2303            _18(T18),
2304            _19(T19),
2305            _20(T20),
2306            _21(T21),
2307            _22(T22),
2308            _23(T23),
2309            _24(T24),
2310            _25(T25),
2311            _26(T26),
2312            _27(T27),
2313            _28(T28),
2314            _29(T29),
2315            _30(T30),
2316            _31(T31),
2317            _32(T32),
2318            _33(T33),
2319        }
2320    };
2321    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2322        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34> {
2323            Completed,
2324            WouldBlock,
2325            _0(T0),
2326            _1(T1),
2327            _2(T2),
2328            _3(T3),
2329            _4(T4),
2330            _5(T5),
2331            _6(T6),
2332            _7(T7),
2333            _8(T8),
2334            _9(T9),
2335            _10(T10),
2336            _11(T11),
2337            _12(T12),
2338            _13(T13),
2339            _14(T14),
2340            _15(T15),
2341            _16(T16),
2342            _17(T17),
2343            _18(T18),
2344            _19(T19),
2345            _20(T20),
2346            _21(T21),
2347            _22(T22),
2348            _23(T23),
2349            _24(T24),
2350            _25(T25),
2351            _26(T26),
2352            _27(T27),
2353            _28(T28),
2354            _29(T29),
2355            _30(T30),
2356            _31(T31),
2357            _32(T32),
2358            _33(T33),
2359            _34(T34),
2360        }
2361    };
2362    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2363        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35> {
2364            Completed,
2365            WouldBlock,
2366            _0(T0),
2367            _1(T1),
2368            _2(T2),
2369            _3(T3),
2370            _4(T4),
2371            _5(T5),
2372            _6(T6),
2373            _7(T7),
2374            _8(T8),
2375            _9(T9),
2376            _10(T10),
2377            _11(T11),
2378            _12(T12),
2379            _13(T13),
2380            _14(T14),
2381            _15(T15),
2382            _16(T16),
2383            _17(T17),
2384            _18(T18),
2385            _19(T19),
2386            _20(T20),
2387            _21(T21),
2388            _22(T22),
2389            _23(T23),
2390            _24(T24),
2391            _25(T25),
2392            _26(T26),
2393            _27(T27),
2394            _28(T28),
2395            _29(T29),
2396            _30(T30),
2397            _31(T31),
2398            _32(T32),
2399            _33(T33),
2400            _34(T34),
2401            _35(T35),
2402        }
2403    };
2404    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2405        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36> {
2406            Completed,
2407            WouldBlock,
2408            _0(T0),
2409            _1(T1),
2410            _2(T2),
2411            _3(T3),
2412            _4(T4),
2413            _5(T5),
2414            _6(T6),
2415            _7(T7),
2416            _8(T8),
2417            _9(T9),
2418            _10(T10),
2419            _11(T11),
2420            _12(T12),
2421            _13(T13),
2422            _14(T14),
2423            _15(T15),
2424            _16(T16),
2425            _17(T17),
2426            _18(T18),
2427            _19(T19),
2428            _20(T20),
2429            _21(T21),
2430            _22(T22),
2431            _23(T23),
2432            _24(T24),
2433            _25(T25),
2434            _26(T26),
2435            _27(T27),
2436            _28(T28),
2437            _29(T29),
2438            _30(T30),
2439            _31(T31),
2440            _32(T32),
2441            _33(T33),
2442            _34(T34),
2443            _35(T35),
2444            _36(T36),
2445        }
2446    };
2447    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2448        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> {
2449            Completed,
2450            WouldBlock,
2451            _0(T0),
2452            _1(T1),
2453            _2(T2),
2454            _3(T3),
2455            _4(T4),
2456            _5(T5),
2457            _6(T6),
2458            _7(T7),
2459            _8(T8),
2460            _9(T9),
2461            _10(T10),
2462            _11(T11),
2463            _12(T12),
2464            _13(T13),
2465            _14(T14),
2466            _15(T15),
2467            _16(T16),
2468            _17(T17),
2469            _18(T18),
2470            _19(T19),
2471            _20(T20),
2472            _21(T21),
2473            _22(T22),
2474            _23(T23),
2475            _24(T24),
2476            _25(T25),
2477            _26(T26),
2478            _27(T27),
2479            _28(T28),
2480            _29(T29),
2481            _30(T30),
2482            _31(T31),
2483            _32(T32),
2484            _33(T33),
2485            _34(T34),
2486            _35(T35),
2487            _36(T36),
2488            _37(T37),
2489        }
2490    };
2491    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2492        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> {
2493            Completed,
2494            WouldBlock,
2495            _0(T0),
2496            _1(T1),
2497            _2(T2),
2498            _3(T3),
2499            _4(T4),
2500            _5(T5),
2501            _6(T6),
2502            _7(T7),
2503            _8(T8),
2504            _9(T9),
2505            _10(T10),
2506            _11(T11),
2507            _12(T12),
2508            _13(T13),
2509            _14(T14),
2510            _15(T15),
2511            _16(T16),
2512            _17(T17),
2513            _18(T18),
2514            _19(T19),
2515            _20(T20),
2516            _21(T21),
2517            _22(T22),
2518            _23(T23),
2519            _24(T24),
2520            _25(T25),
2521            _26(T26),
2522            _27(T27),
2523            _28(T28),
2524            _29(T29),
2525            _30(T30),
2526            _31(T31),
2527            _32(T32),
2528            _33(T33),
2529            _34(T34),
2530            _35(T35),
2531            _36(T36),
2532            _37(T37),
2533            _38(T38),
2534        }
2535    };
2536    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2537        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> {
2538            Completed,
2539            WouldBlock,
2540            _0(T0),
2541            _1(T1),
2542            _2(T2),
2543            _3(T3),
2544            _4(T4),
2545            _5(T5),
2546            _6(T6),
2547            _7(T7),
2548            _8(T8),
2549            _9(T9),
2550            _10(T10),
2551            _11(T11),
2552            _12(T12),
2553            _13(T13),
2554            _14(T14),
2555            _15(T15),
2556            _16(T16),
2557            _17(T17),
2558            _18(T18),
2559            _19(T19),
2560            _20(T20),
2561            _21(T21),
2562            _22(T22),
2563            _23(T23),
2564            _24(T24),
2565            _25(T25),
2566            _26(T26),
2567            _27(T27),
2568            _28(T28),
2569            _29(T29),
2570            _30(T30),
2571            _31(T31),
2572            _32(T32),
2573            _33(T33),
2574            _34(T34),
2575            _35(T35),
2576            _36(T36),
2577            _37(T37),
2578            _38(T38),
2579            _39(T39),
2580        }
2581    };
2582    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2583        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> {
2584            Completed,
2585            WouldBlock,
2586            _0(T0),
2587            _1(T1),
2588            _2(T2),
2589            _3(T3),
2590            _4(T4),
2591            _5(T5),
2592            _6(T6),
2593            _7(T7),
2594            _8(T8),
2595            _9(T9),
2596            _10(T10),
2597            _11(T11),
2598            _12(T12),
2599            _13(T13),
2600            _14(T14),
2601            _15(T15),
2602            _16(T16),
2603            _17(T17),
2604            _18(T18),
2605            _19(T19),
2606            _20(T20),
2607            _21(T21),
2608            _22(T22),
2609            _23(T23),
2610            _24(T24),
2611            _25(T25),
2612            _26(T26),
2613            _27(T27),
2614            _28(T28),
2615            _29(T29),
2616            _30(T30),
2617            _31(T31),
2618            _32(T32),
2619            _33(T33),
2620            _34(T34),
2621            _35(T35),
2622            _36(T36),
2623            _37(T37),
2624            _38(T38),
2625            _39(T39),
2626            _40(T40),
2627        }
2628    };
2629    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2630        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> {
2631            Completed,
2632            WouldBlock,
2633            _0(T0),
2634            _1(T1),
2635            _2(T2),
2636            _3(T3),
2637            _4(T4),
2638            _5(T5),
2639            _6(T6),
2640            _7(T7),
2641            _8(T8),
2642            _9(T9),
2643            _10(T10),
2644            _11(T11),
2645            _12(T12),
2646            _13(T13),
2647            _14(T14),
2648            _15(T15),
2649            _16(T16),
2650            _17(T17),
2651            _18(T18),
2652            _19(T19),
2653            _20(T20),
2654            _21(T21),
2655            _22(T22),
2656            _23(T23),
2657            _24(T24),
2658            _25(T25),
2659            _26(T26),
2660            _27(T27),
2661            _28(T28),
2662            _29(T29),
2663            _30(T30),
2664            _31(T31),
2665            _32(T32),
2666            _33(T33),
2667            _34(T34),
2668            _35(T35),
2669            _36(T36),
2670            _37(T37),
2671            _38(T38),
2672            _39(T39),
2673            _40(T40),
2674            _41(T41),
2675        }
2676    };
2677    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2678        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42> {
2679            Completed,
2680            WouldBlock,
2681            _0(T0),
2682            _1(T1),
2683            _2(T2),
2684            _3(T3),
2685            _4(T4),
2686            _5(T5),
2687            _6(T6),
2688            _7(T7),
2689            _8(T8),
2690            _9(T9),
2691            _10(T10),
2692            _11(T11),
2693            _12(T12),
2694            _13(T13),
2695            _14(T14),
2696            _15(T15),
2697            _16(T16),
2698            _17(T17),
2699            _18(T18),
2700            _19(T19),
2701            _20(T20),
2702            _21(T21),
2703            _22(T22),
2704            _23(T23),
2705            _24(T24),
2706            _25(T25),
2707            _26(T26),
2708            _27(T27),
2709            _28(T28),
2710            _29(T29),
2711            _30(T30),
2712            _31(T31),
2713            _32(T32),
2714            _33(T33),
2715            _34(T34),
2716            _35(T35),
2717            _36(T36),
2718            _37(T37),
2719            _38(T38),
2720            _39(T39),
2721            _40(T40),
2722            _41(T41),
2723            _42(T42),
2724        }
2725    };
2726    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2727        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43> {
2728            Completed,
2729            WouldBlock,
2730            _0(T0),
2731            _1(T1),
2732            _2(T2),
2733            _3(T3),
2734            _4(T4),
2735            _5(T5),
2736            _6(T6),
2737            _7(T7),
2738            _8(T8),
2739            _9(T9),
2740            _10(T10),
2741            _11(T11),
2742            _12(T12),
2743            _13(T13),
2744            _14(T14),
2745            _15(T15),
2746            _16(T16),
2747            _17(T17),
2748            _18(T18),
2749            _19(T19),
2750            _20(T20),
2751            _21(T21),
2752            _22(T22),
2753            _23(T23),
2754            _24(T24),
2755            _25(T25),
2756            _26(T26),
2757            _27(T27),
2758            _28(T28),
2759            _29(T29),
2760            _30(T30),
2761            _31(T31),
2762            _32(T32),
2763            _33(T33),
2764            _34(T34),
2765            _35(T35),
2766            _36(T36),
2767            _37(T37),
2768            _38(T38),
2769            _39(T39),
2770            _40(T40),
2771            _41(T41),
2772            _42(T42),
2773            _43(T43),
2774        }
2775    };
2776    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2777        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44> {
2778            Completed,
2779            WouldBlock,
2780            _0(T0),
2781            _1(T1),
2782            _2(T2),
2783            _3(T3),
2784            _4(T4),
2785            _5(T5),
2786            _6(T6),
2787            _7(T7),
2788            _8(T8),
2789            _9(T9),
2790            _10(T10),
2791            _11(T11),
2792            _12(T12),
2793            _13(T13),
2794            _14(T14),
2795            _15(T15),
2796            _16(T16),
2797            _17(T17),
2798            _18(T18),
2799            _19(T19),
2800            _20(T20),
2801            _21(T21),
2802            _22(T22),
2803            _23(T23),
2804            _24(T24),
2805            _25(T25),
2806            _26(T26),
2807            _27(T27),
2808            _28(T28),
2809            _29(T29),
2810            _30(T30),
2811            _31(T31),
2812            _32(T32),
2813            _33(T33),
2814            _34(T34),
2815            _35(T35),
2816            _36(T36),
2817            _37(T37),
2818            _38(T38),
2819            _39(T39),
2820            _40(T40),
2821            _41(T41),
2822            _42(T42),
2823            _43(T43),
2824            _44(T44),
2825        }
2826    };
2827    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2828        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45> {
2829            Completed,
2830            WouldBlock,
2831            _0(T0),
2832            _1(T1),
2833            _2(T2),
2834            _3(T3),
2835            _4(T4),
2836            _5(T5),
2837            _6(T6),
2838            _7(T7),
2839            _8(T8),
2840            _9(T9),
2841            _10(T10),
2842            _11(T11),
2843            _12(T12),
2844            _13(T13),
2845            _14(T14),
2846            _15(T15),
2847            _16(T16),
2848            _17(T17),
2849            _18(T18),
2850            _19(T19),
2851            _20(T20),
2852            _21(T21),
2853            _22(T22),
2854            _23(T23),
2855            _24(T24),
2856            _25(T25),
2857            _26(T26),
2858            _27(T27),
2859            _28(T28),
2860            _29(T29),
2861            _30(T30),
2862            _31(T31),
2863            _32(T32),
2864            _33(T33),
2865            _34(T34),
2866            _35(T35),
2867            _36(T36),
2868            _37(T37),
2869            _38(T38),
2870            _39(T39),
2871            _40(T40),
2872            _41(T41),
2873            _42(T42),
2874            _43(T43),
2875            _44(T44),
2876            _45(T45),
2877        }
2878    };
2879    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2880        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46> {
2881            Completed,
2882            WouldBlock,
2883            _0(T0),
2884            _1(T1),
2885            _2(T2),
2886            _3(T3),
2887            _4(T4),
2888            _5(T5),
2889            _6(T6),
2890            _7(T7),
2891            _8(T8),
2892            _9(T9),
2893            _10(T10),
2894            _11(T11),
2895            _12(T12),
2896            _13(T13),
2897            _14(T14),
2898            _15(T15),
2899            _16(T16),
2900            _17(T17),
2901            _18(T18),
2902            _19(T19),
2903            _20(T20),
2904            _21(T21),
2905            _22(T22),
2906            _23(T23),
2907            _24(T24),
2908            _25(T25),
2909            _26(T26),
2910            _27(T27),
2911            _28(T28),
2912            _29(T29),
2913            _30(T30),
2914            _31(T31),
2915            _32(T32),
2916            _33(T33),
2917            _34(T34),
2918            _35(T35),
2919            _36(T36),
2920            _37(T37),
2921            _38(T38),
2922            _39(T39),
2923            _40(T40),
2924            _41(T41),
2925            _42(T42),
2926            _43(T43),
2927            _44(T44),
2928            _45(T45),
2929            _46(T46),
2930        }
2931    };
2932    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2933        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47> {
2934            Completed,
2935            WouldBlock,
2936            _0(T0),
2937            _1(T1),
2938            _2(T2),
2939            _3(T3),
2940            _4(T4),
2941            _5(T5),
2942            _6(T6),
2943            _7(T7),
2944            _8(T8),
2945            _9(T9),
2946            _10(T10),
2947            _11(T11),
2948            _12(T12),
2949            _13(T13),
2950            _14(T14),
2951            _15(T15),
2952            _16(T16),
2953            _17(T17),
2954            _18(T18),
2955            _19(T19),
2956            _20(T20),
2957            _21(T21),
2958            _22(T22),
2959            _23(T23),
2960            _24(T24),
2961            _25(T25),
2962            _26(T26),
2963            _27(T27),
2964            _28(T28),
2965            _29(T29),
2966            _30(T30),
2967            _31(T31),
2968            _32(T32),
2969            _33(T33),
2970            _34(T34),
2971            _35(T35),
2972            _36(T36),
2973            _37(T37),
2974            _38(T38),
2975            _39(T39),
2976            _40(T40),
2977            _41(T41),
2978            _42(T42),
2979            _43(T43),
2980            _44(T44),
2981            _45(T45),
2982            _46(T46),
2983            _47(T47),
2984        }
2985    };
2986    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
2987        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48> {
2988            Completed,
2989            WouldBlock,
2990            _0(T0),
2991            _1(T1),
2992            _2(T2),
2993            _3(T3),
2994            _4(T4),
2995            _5(T5),
2996            _6(T6),
2997            _7(T7),
2998            _8(T8),
2999            _9(T9),
3000            _10(T10),
3001            _11(T11),
3002            _12(T12),
3003            _13(T13),
3004            _14(T14),
3005            _15(T15),
3006            _16(T16),
3007            _17(T17),
3008            _18(T18),
3009            _19(T19),
3010            _20(T20),
3011            _21(T21),
3012            _22(T22),
3013            _23(T23),
3014            _24(T24),
3015            _25(T25),
3016            _26(T26),
3017            _27(T27),
3018            _28(T28),
3019            _29(T29),
3020            _30(T30),
3021            _31(T31),
3022            _32(T32),
3023            _33(T33),
3024            _34(T34),
3025            _35(T35),
3026            _36(T36),
3027            _37(T37),
3028            _38(T38),
3029            _39(T39),
3030            _40(T40),
3031            _41(T41),
3032            _42(T42),
3033            _43(T43),
3034            _44(T44),
3035            _45(T45),
3036            _46(T46),
3037            _47(T47),
3038            _48(T48),
3039        }
3040    };
3041    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3042        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49> {
3043            Completed,
3044            WouldBlock,
3045            _0(T0),
3046            _1(T1),
3047            _2(T2),
3048            _3(T3),
3049            _4(T4),
3050            _5(T5),
3051            _6(T6),
3052            _7(T7),
3053            _8(T8),
3054            _9(T9),
3055            _10(T10),
3056            _11(T11),
3057            _12(T12),
3058            _13(T13),
3059            _14(T14),
3060            _15(T15),
3061            _16(T16),
3062            _17(T17),
3063            _18(T18),
3064            _19(T19),
3065            _20(T20),
3066            _21(T21),
3067            _22(T22),
3068            _23(T23),
3069            _24(T24),
3070            _25(T25),
3071            _26(T26),
3072            _27(T27),
3073            _28(T28),
3074            _29(T29),
3075            _30(T30),
3076            _31(T31),
3077            _32(T32),
3078            _33(T33),
3079            _34(T34),
3080            _35(T35),
3081            _36(T36),
3082            _37(T37),
3083            _38(T38),
3084            _39(T39),
3085            _40(T40),
3086            _41(T41),
3087            _42(T42),
3088            _43(T43),
3089            _44(T44),
3090            _45(T45),
3091            _46(T46),
3092            _47(T47),
3093            _48(T48),
3094            _49(T49),
3095        }
3096    };
3097    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3098        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50> {
3099            Completed,
3100            WouldBlock,
3101            _0(T0),
3102            _1(T1),
3103            _2(T2),
3104            _3(T3),
3105            _4(T4),
3106            _5(T5),
3107            _6(T6),
3108            _7(T7),
3109            _8(T8),
3110            _9(T9),
3111            _10(T10),
3112            _11(T11),
3113            _12(T12),
3114            _13(T13),
3115            _14(T14),
3116            _15(T15),
3117            _16(T16),
3118            _17(T17),
3119            _18(T18),
3120            _19(T19),
3121            _20(T20),
3122            _21(T21),
3123            _22(T22),
3124            _23(T23),
3125            _24(T24),
3126            _25(T25),
3127            _26(T26),
3128            _27(T27),
3129            _28(T28),
3130            _29(T29),
3131            _30(T30),
3132            _31(T31),
3133            _32(T32),
3134            _33(T33),
3135            _34(T34),
3136            _35(T35),
3137            _36(T36),
3138            _37(T37),
3139            _38(T38),
3140            _39(T39),
3141            _40(T40),
3142            _41(T41),
3143            _42(T42),
3144            _43(T43),
3145            _44(T44),
3146            _45(T45),
3147            _46(T46),
3148            _47(T47),
3149            _48(T48),
3150            _49(T49),
3151            _50(T50),
3152        }
3153    };
3154    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3155        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50, T51> {
3156            Completed,
3157            WouldBlock,
3158            _0(T0),
3159            _1(T1),
3160            _2(T2),
3161            _3(T3),
3162            _4(T4),
3163            _5(T5),
3164            _6(T6),
3165            _7(T7),
3166            _8(T8),
3167            _9(T9),
3168            _10(T10),
3169            _11(T11),
3170            _12(T12),
3171            _13(T13),
3172            _14(T14),
3173            _15(T15),
3174            _16(T16),
3175            _17(T17),
3176            _18(T18),
3177            _19(T19),
3178            _20(T20),
3179            _21(T21),
3180            _22(T22),
3181            _23(T23),
3182            _24(T24),
3183            _25(T25),
3184            _26(T26),
3185            _27(T27),
3186            _28(T28),
3187            _29(T29),
3188            _30(T30),
3189            _31(T31),
3190            _32(T32),
3191            _33(T33),
3192            _34(T34),
3193            _35(T35),
3194            _36(T36),
3195            _37(T37),
3196            _38(T38),
3197            _39(T39),
3198            _40(T40),
3199            _41(T41),
3200            _42(T42),
3201            _43(T43),
3202            _44(T44),
3203            _45(T45),
3204            _46(T46),
3205            _47(T47),
3206            _48(T48),
3207            _49(T49),
3208            _50(T50),
3209            _51(T51),
3210        }
3211    };
3212    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3213        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50, T51, T52> {
3214            Completed,
3215            WouldBlock,
3216            _0(T0),
3217            _1(T1),
3218            _2(T2),
3219            _3(T3),
3220            _4(T4),
3221            _5(T5),
3222            _6(T6),
3223            _7(T7),
3224            _8(T8),
3225            _9(T9),
3226            _10(T10),
3227            _11(T11),
3228            _12(T12),
3229            _13(T13),
3230            _14(T14),
3231            _15(T15),
3232            _16(T16),
3233            _17(T17),
3234            _18(T18),
3235            _19(T19),
3236            _20(T20),
3237            _21(T21),
3238            _22(T22),
3239            _23(T23),
3240            _24(T24),
3241            _25(T25),
3242            _26(T26),
3243            _27(T27),
3244            _28(T28),
3245            _29(T29),
3246            _30(T30),
3247            _31(T31),
3248            _32(T32),
3249            _33(T33),
3250            _34(T34),
3251            _35(T35),
3252            _36(T36),
3253            _37(T37),
3254            _38(T38),
3255            _39(T39),
3256            _40(T40),
3257            _41(T41),
3258            _42(T42),
3259            _43(T43),
3260            _44(T44),
3261            _45(T45),
3262            _46(T46),
3263            _47(T47),
3264            _48(T48),
3265            _49(T49),
3266            _50(T50),
3267            _51(T51),
3268            _52(T52),
3269        }
3270    };
3271    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3272        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50, T51, T52, T53> {
3273            Completed,
3274            WouldBlock,
3275            _0(T0),
3276            _1(T1),
3277            _2(T2),
3278            _3(T3),
3279            _4(T4),
3280            _5(T5),
3281            _6(T6),
3282            _7(T7),
3283            _8(T8),
3284            _9(T9),
3285            _10(T10),
3286            _11(T11),
3287            _12(T12),
3288            _13(T13),
3289            _14(T14),
3290            _15(T15),
3291            _16(T16),
3292            _17(T17),
3293            _18(T18),
3294            _19(T19),
3295            _20(T20),
3296            _21(T21),
3297            _22(T22),
3298            _23(T23),
3299            _24(T24),
3300            _25(T25),
3301            _26(T26),
3302            _27(T27),
3303            _28(T28),
3304            _29(T29),
3305            _30(T30),
3306            _31(T31),
3307            _32(T32),
3308            _33(T33),
3309            _34(T34),
3310            _35(T35),
3311            _36(T36),
3312            _37(T37),
3313            _38(T38),
3314            _39(T39),
3315            _40(T40),
3316            _41(T41),
3317            _42(T42),
3318            _43(T43),
3319            _44(T44),
3320            _45(T45),
3321            _46(T46),
3322            _47(T47),
3323            _48(T48),
3324            _49(T49),
3325            _50(T50),
3326            _51(T51),
3327            _52(T52),
3328            _53(T53),
3329        }
3330    };
3331    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3332        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50, T51, T52, T53, T54> {
3333            Completed,
3334            WouldBlock,
3335            _0(T0),
3336            _1(T1),
3337            _2(T2),
3338            _3(T3),
3339            _4(T4),
3340            _5(T5),
3341            _6(T6),
3342            _7(T7),
3343            _8(T8),
3344            _9(T9),
3345            _10(T10),
3346            _11(T11),
3347            _12(T12),
3348            _13(T13),
3349            _14(T14),
3350            _15(T15),
3351            _16(T16),
3352            _17(T17),
3353            _18(T18),
3354            _19(T19),
3355            _20(T20),
3356            _21(T21),
3357            _22(T22),
3358            _23(T23),
3359            _24(T24),
3360            _25(T25),
3361            _26(T26),
3362            _27(T27),
3363            _28(T28),
3364            _29(T29),
3365            _30(T30),
3366            _31(T31),
3367            _32(T32),
3368            _33(T33),
3369            _34(T34),
3370            _35(T35),
3371            _36(T36),
3372            _37(T37),
3373            _38(T38),
3374            _39(T39),
3375            _40(T40),
3376            _41(T41),
3377            _42(T42),
3378            _43(T43),
3379            _44(T44),
3380            _45(T45),
3381            _46(T46),
3382            _47(T47),
3383            _48(T48),
3384            _49(T49),
3385            _50(T50),
3386            _51(T51),
3387            _52(T52),
3388            _53(T53),
3389            _54(T54),
3390        }
3391    };
3392    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3393        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50, T51, T52, T53, T54, T55> {
3394            Completed,
3395            WouldBlock,
3396            _0(T0),
3397            _1(T1),
3398            _2(T2),
3399            _3(T3),
3400            _4(T4),
3401            _5(T5),
3402            _6(T6),
3403            _7(T7),
3404            _8(T8),
3405            _9(T9),
3406            _10(T10),
3407            _11(T11),
3408            _12(T12),
3409            _13(T13),
3410            _14(T14),
3411            _15(T15),
3412            _16(T16),
3413            _17(T17),
3414            _18(T18),
3415            _19(T19),
3416            _20(T20),
3417            _21(T21),
3418            _22(T22),
3419            _23(T23),
3420            _24(T24),
3421            _25(T25),
3422            _26(T26),
3423            _27(T27),
3424            _28(T28),
3425            _29(T29),
3426            _30(T30),
3427            _31(T31),
3428            _32(T32),
3429            _33(T33),
3430            _34(T34),
3431            _35(T35),
3432            _36(T36),
3433            _37(T37),
3434            _38(T38),
3435            _39(T39),
3436            _40(T40),
3437            _41(T41),
3438            _42(T42),
3439            _43(T43),
3440            _44(T44),
3441            _45(T45),
3442            _46(T46),
3443            _47(T47),
3444            _48(T48),
3445            _49(T49),
3446            _50(T50),
3447            _51(T51),
3448            _52(T52),
3449            _53(T53),
3450            _54(T54),
3451            _55(T55),
3452        }
3453    };
3454    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3455        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50, T51, T52, T53, T54, T55, T56> {
3456            Completed,
3457            WouldBlock,
3458            _0(T0),
3459            _1(T1),
3460            _2(T2),
3461            _3(T3),
3462            _4(T4),
3463            _5(T5),
3464            _6(T6),
3465            _7(T7),
3466            _8(T8),
3467            _9(T9),
3468            _10(T10),
3469            _11(T11),
3470            _12(T12),
3471            _13(T13),
3472            _14(T14),
3473            _15(T15),
3474            _16(T16),
3475            _17(T17),
3476            _18(T18),
3477            _19(T19),
3478            _20(T20),
3479            _21(T21),
3480            _22(T22),
3481            _23(T23),
3482            _24(T24),
3483            _25(T25),
3484            _26(T26),
3485            _27(T27),
3486            _28(T28),
3487            _29(T29),
3488            _30(T30),
3489            _31(T31),
3490            _32(T32),
3491            _33(T33),
3492            _34(T34),
3493            _35(T35),
3494            _36(T36),
3495            _37(T37),
3496            _38(T38),
3497            _39(T39),
3498            _40(T40),
3499            _41(T41),
3500            _42(T42),
3501            _43(T43),
3502            _44(T44),
3503            _45(T45),
3504            _46(T46),
3505            _47(T47),
3506            _48(T48),
3507            _49(T49),
3508            _50(T50),
3509            _51(T51),
3510            _52(T52),
3511            _53(T53),
3512            _54(T54),
3513            _55(T55),
3514            _56(T56),
3515        }
3516    };
3517    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3518        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50, T51, T52, T53, T54, T55, T56, T57> {
3519            Completed,
3520            WouldBlock,
3521            _0(T0),
3522            _1(T1),
3523            _2(T2),
3524            _3(T3),
3525            _4(T4),
3526            _5(T5),
3527            _6(T6),
3528            _7(T7),
3529            _8(T8),
3530            _9(T9),
3531            _10(T10),
3532            _11(T11),
3533            _12(T12),
3534            _13(T13),
3535            _14(T14),
3536            _15(T15),
3537            _16(T16),
3538            _17(T17),
3539            _18(T18),
3540            _19(T19),
3541            _20(T20),
3542            _21(T21),
3543            _22(T22),
3544            _23(T23),
3545            _24(T24),
3546            _25(T25),
3547            _26(T26),
3548            _27(T27),
3549            _28(T28),
3550            _29(T29),
3551            _30(T30),
3552            _31(T31),
3553            _32(T32),
3554            _33(T33),
3555            _34(T34),
3556            _35(T35),
3557            _36(T36),
3558            _37(T37),
3559            _38(T38),
3560            _39(T39),
3561            _40(T40),
3562            _41(T41),
3563            _42(T42),
3564            _43(T43),
3565            _44(T44),
3566            _45(T45),
3567            _46(T46),
3568            _47(T47),
3569            _48(T48),
3570            _49(T49),
3571            _50(T50),
3572            _51(T51),
3573            _52(T52),
3574            _53(T53),
3575            _54(T54),
3576            _55(T55),
3577            _56(T56),
3578            _57(T57),
3579        }
3580    };
3581    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3582        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50, T51, T52, T53, T54, T55, T56, T57, T58> {
3583            Completed,
3584            WouldBlock,
3585            _0(T0),
3586            _1(T1),
3587            _2(T2),
3588            _3(T3),
3589            _4(T4),
3590            _5(T5),
3591            _6(T6),
3592            _7(T7),
3593            _8(T8),
3594            _9(T9),
3595            _10(T10),
3596            _11(T11),
3597            _12(T12),
3598            _13(T13),
3599            _14(T14),
3600            _15(T15),
3601            _16(T16),
3602            _17(T17),
3603            _18(T18),
3604            _19(T19),
3605            _20(T20),
3606            _21(T21),
3607            _22(T22),
3608            _23(T23),
3609            _24(T24),
3610            _25(T25),
3611            _26(T26),
3612            _27(T27),
3613            _28(T28),
3614            _29(T29),
3615            _30(T30),
3616            _31(T31),
3617            _32(T32),
3618            _33(T33),
3619            _34(T34),
3620            _35(T35),
3621            _36(T36),
3622            _37(T37),
3623            _38(T38),
3624            _39(T39),
3625            _40(T40),
3626            _41(T41),
3627            _42(T42),
3628            _43(T43),
3629            _44(T44),
3630            _45(T45),
3631            _46(T46),
3632            _47(T47),
3633            _48(T48),
3634            _49(T49),
3635            _50(T50),
3636            _51(T51),
3637            _52(T52),
3638            _53(T53),
3639            _54(T54),
3640            _55(T55),
3641            _56(T56),
3642            _57(T57),
3643            _58(T58),
3644        }
3645    };
3646    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3647        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50, T51, T52, T53, T54, T55, T56, T57, T58, T59> {
3648            Completed,
3649            WouldBlock,
3650            _0(T0),
3651            _1(T1),
3652            _2(T2),
3653            _3(T3),
3654            _4(T4),
3655            _5(T5),
3656            _6(T6),
3657            _7(T7),
3658            _8(T8),
3659            _9(T9),
3660            _10(T10),
3661            _11(T11),
3662            _12(T12),
3663            _13(T13),
3664            _14(T14),
3665            _15(T15),
3666            _16(T16),
3667            _17(T17),
3668            _18(T18),
3669            _19(T19),
3670            _20(T20),
3671            _21(T21),
3672            _22(T22),
3673            _23(T23),
3674            _24(T24),
3675            _25(T25),
3676            _26(T26),
3677            _27(T27),
3678            _28(T28),
3679            _29(T29),
3680            _30(T30),
3681            _31(T31),
3682            _32(T32),
3683            _33(T33),
3684            _34(T34),
3685            _35(T35),
3686            _36(T36),
3687            _37(T37),
3688            _38(T38),
3689            _39(T39),
3690            _40(T40),
3691            _41(T41),
3692            _42(T42),
3693            _43(T43),
3694            _44(T44),
3695            _45(T45),
3696            _46(T46),
3697            _47(T47),
3698            _48(T48),
3699            _49(T49),
3700            _50(T50),
3701            _51(T51),
3702            _52(T52),
3703            _53(T53),
3704            _54(T54),
3705            _55(T55),
3706            _56(T56),
3707            _57(T57),
3708            _58(T58),
3709            _59(T59),
3710        }
3711    };
3712    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3713        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50, T51, T52, T53, T54, T55, T56, T57, T58, T59, T60> {
3714            Completed,
3715            WouldBlock,
3716            _0(T0),
3717            _1(T1),
3718            _2(T2),
3719            _3(T3),
3720            _4(T4),
3721            _5(T5),
3722            _6(T6),
3723            _7(T7),
3724            _8(T8),
3725            _9(T9),
3726            _10(T10),
3727            _11(T11),
3728            _12(T12),
3729            _13(T13),
3730            _14(T14),
3731            _15(T15),
3732            _16(T16),
3733            _17(T17),
3734            _18(T18),
3735            _19(T19),
3736            _20(T20),
3737            _21(T21),
3738            _22(T22),
3739            _23(T23),
3740            _24(T24),
3741            _25(T25),
3742            _26(T26),
3743            _27(T27),
3744            _28(T28),
3745            _29(T29),
3746            _30(T30),
3747            _31(T31),
3748            _32(T32),
3749            _33(T33),
3750            _34(T34),
3751            _35(T35),
3752            _36(T36),
3753            _37(T37),
3754            _38(T38),
3755            _39(T39),
3756            _40(T40),
3757            _41(T41),
3758            _42(T42),
3759            _43(T43),
3760            _44(T44),
3761            _45(T45),
3762            _46(T46),
3763            _47(T47),
3764            _48(T48),
3765            _49(T49),
3766            _50(T50),
3767            _51(T51),
3768            _52(T52),
3769            _53(T53),
3770            _54(T54),
3771            _55(T55),
3772            _56(T56),
3773            _57(T57),
3774            _58(T58),
3775            _59(T59),
3776            _60(T60),
3777        }
3778    };
3779    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3780        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50, T51, T52, T53, T54, T55, T56, T57, T58, T59, T60, T61> {
3781            Completed,
3782            WouldBlock,
3783            _0(T0),
3784            _1(T1),
3785            _2(T2),
3786            _3(T3),
3787            _4(T4),
3788            _5(T5),
3789            _6(T6),
3790            _7(T7),
3791            _8(T8),
3792            _9(T9),
3793            _10(T10),
3794            _11(T11),
3795            _12(T12),
3796            _13(T13),
3797            _14(T14),
3798            _15(T15),
3799            _16(T16),
3800            _17(T17),
3801            _18(T18),
3802            _19(T19),
3803            _20(T20),
3804            _21(T21),
3805            _22(T22),
3806            _23(T23),
3807            _24(T24),
3808            _25(T25),
3809            _26(T26),
3810            _27(T27),
3811            _28(T28),
3812            _29(T29),
3813            _30(T30),
3814            _31(T31),
3815            _32(T32),
3816            _33(T33),
3817            _34(T34),
3818            _35(T35),
3819            _36(T36),
3820            _37(T37),
3821            _38(T38),
3822            _39(T39),
3823            _40(T40),
3824            _41(T41),
3825            _42(T42),
3826            _43(T43),
3827            _44(T44),
3828            _45(T45),
3829            _46(T46),
3830            _47(T47),
3831            _48(T48),
3832            _49(T49),
3833            _50(T50),
3834            _51(T51),
3835            _52(T52),
3836            _53(T53),
3837            _54(T54),
3838            _55(T55),
3839            _56(T56),
3840            _57(T57),
3841            _58(T58),
3842            _59(T59),
3843            _60(T60),
3844            _61(T61),
3845        }
3846    };
3847    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3848        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50, T51, T52, T53, T54, T55, T56, T57, T58, T59, T60, T61, T62> {
3849            Completed,
3850            WouldBlock,
3851            _0(T0),
3852            _1(T1),
3853            _2(T2),
3854            _3(T3),
3855            _4(T4),
3856            _5(T5),
3857            _6(T6),
3858            _7(T7),
3859            _8(T8),
3860            _9(T9),
3861            _10(T10),
3862            _11(T11),
3863            _12(T12),
3864            _13(T13),
3865            _14(T14),
3866            _15(T15),
3867            _16(T16),
3868            _17(T17),
3869            _18(T18),
3870            _19(T19),
3871            _20(T20),
3872            _21(T21),
3873            _22(T22),
3874            _23(T23),
3875            _24(T24),
3876            _25(T25),
3877            _26(T26),
3878            _27(T27),
3879            _28(T28),
3880            _29(T29),
3881            _30(T30),
3882            _31(T31),
3883            _32(T32),
3884            _33(T33),
3885            _34(T34),
3886            _35(T35),
3887            _36(T36),
3888            _37(T37),
3889            _38(T38),
3890            _39(T39),
3891            _40(T40),
3892            _41(T41),
3893            _42(T42),
3894            _43(T43),
3895            _44(T44),
3896            _45(T45),
3897            _46(T46),
3898            _47(T47),
3899            _48(T48),
3900            _49(T49),
3901            _50(T50),
3902            _51(T51),
3903            _52(T52),
3904            _53(T53),
3905            _54(T54),
3906            _55(T55),
3907            _56(T56),
3908            _57(T57),
3909            _58(T58),
3910            _59(T59),
3911            _60(T60),
3912            _61(T61),
3913            _62(T62),
3914        }
3915    };
3916    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3917        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50, T51, T52, T53, T54, T55, T56, T57, T58, T59, T60, T61, T62, T63> {
3918            Completed,
3919            WouldBlock,
3920            _0(T0),
3921            _1(T1),
3922            _2(T2),
3923            _3(T3),
3924            _4(T4),
3925            _5(T5),
3926            _6(T6),
3927            _7(T7),
3928            _8(T8),
3929            _9(T9),
3930            _10(T10),
3931            _11(T11),
3932            _12(T12),
3933            _13(T13),
3934            _14(T14),
3935            _15(T15),
3936            _16(T16),
3937            _17(T17),
3938            _18(T18),
3939            _19(T19),
3940            _20(T20),
3941            _21(T21),
3942            _22(T22),
3943            _23(T23),
3944            _24(T24),
3945            _25(T25),
3946            _26(T26),
3947            _27(T27),
3948            _28(T28),
3949            _29(T29),
3950            _30(T30),
3951            _31(T31),
3952            _32(T32),
3953            _33(T33),
3954            _34(T34),
3955            _35(T35),
3956            _36(T36),
3957            _37(T37),
3958            _38(T38),
3959            _39(T39),
3960            _40(T40),
3961            _41(T41),
3962            _42(T42),
3963            _43(T43),
3964            _44(T44),
3965            _45(T45),
3966            _46(T46),
3967            _47(T47),
3968            _48(T48),
3969            _49(T49),
3970            _50(T50),
3971            _51(T51),
3972            _52(T52),
3973            _53(T53),
3974            _54(T54),
3975            _55(T55),
3976            _56(T56),
3977            _57(T57),
3978            _58(T58),
3979            _59(T59),
3980            _60(T60),
3981            _61(T61),
3982            _62(T62),
3983            _63(T63),
3984        }
3985    };
3986    (@output-type (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => {
3987        enum __SelectOutput<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50, T51, T52, T53, T54, T55, T56, T57, T58, T59, T60, T61, T62, T63, T64> {
3988            Completed,
3989            WouldBlock,
3990            _0(T0),
3991            _1(T1),
3992            _2(T2),
3993            _3(T3),
3994            _4(T4),
3995            _5(T5),
3996            _6(T6),
3997            _7(T7),
3998            _8(T8),
3999            _9(T9),
4000            _10(T10),
4001            _11(T11),
4002            _12(T12),
4003            _13(T13),
4004            _14(T14),
4005            _15(T15),
4006            _16(T16),
4007            _17(T17),
4008            _18(T18),
4009            _19(T19),
4010            _20(T20),
4011            _21(T21),
4012            _22(T22),
4013            _23(T23),
4014            _24(T24),
4015            _25(T25),
4016            _26(T26),
4017            _27(T27),
4018            _28(T28),
4019            _29(T29),
4020            _30(T30),
4021            _31(T31),
4022            _32(T32),
4023            _33(T33),
4024            _34(T34),
4025            _35(T35),
4026            _36(T36),
4027            _37(T37),
4028            _38(T38),
4029            _39(T39),
4030            _40(T40),
4031            _41(T41),
4032            _42(T42),
4033            _43(T43),
4034            _44(T44),
4035            _45(T45),
4036            _46(T46),
4037            _47(T47),
4038            _48(T48),
4039            _49(T49),
4040            _50(T50),
4041            _51(T51),
4042            _52(T52),
4043            _53(T53),
4044            _54(T54),
4045            _55(T55),
4046            _56(T56),
4047            _57(T57),
4048            _58(T58),
4049            _59(T59),
4050            _60(T60),
4051            _61(T61),
4052            _62(T62),
4053            _63(T63),
4054            _64(T64),
4055        }
4056    };
4057
4058    // Entry points.
4059    (biased; $($token:tt)*) => {
4060        $crate::select_internal!(@list ($($token)*) () () () (); biased = true)
4061    };
4062    ($($token:tt)*) => {
4063        $crate::select_internal!(@list ($($token)*) () () () (); biased = false)
4064    }
4065}
4066
4067#[cfg(test)]
4068mod tests;