text:
Diagnostic yield of renal biopsy immediately prior to laparoscopic radiofrequency ablation: A multicenter study
Christopher C. Kyle, M. Scott Wingo, Robert I. Carey, Raymond J. Leveillee, Vincent G. Bird
Introduction: Ablative therapy is increasing for the management of small renal masses. Laparoscopic as well as percutaneous cryotherapy and radiofrequency ablation (RFA) have been utilized. Herein we review our experience with renal biopsy immediately prior to laparoscopic RFA. Methods and Materials: A prospectively collected database containing all patients who underwent laparoscopic RFA by three different surgeons at two different institutions was reviewed. Renal biopsies were performed in each patient during transperitoneal laparoscopy after mobilization of the kidney and prior to RFA. The biopsy needle was passed percutaneously via a sheath through the abdominal wall. Multiple core biopsies (3-5) were taken under visual and ultrasonic guidance. All were submitted for permanent pathologic sectioning. Results: 138 patients underwent renal biopsy prior to RFA. Mean tumor size was 3.0 cm (range 1.0-6.9). The mean age was 72 years (range 39-90). There were 42 females and 96 males. Mean blood loss was 28ml (0-400ml). Only 5 patients lost more than 50ml, and in each case the bleeding was associated with complicated renal mobilization and dissection prior to biopsy. Final pathology revealed renal cell carcinoma in 95, oncocytic neoplasm in 26, and angiomyolipoma in 9.8 patients were considered to have nondiagnostic biopsies. In this group, final pathology revealed benign cysts in 3, inconclusive specimens in 3, fibrosis in 1, and normal tissue in 1. Hence, a clear diagnosis was possible in 130 of 138 patients, which is 94.2%. RCC was diagnosed in 68.8% of the patients, and in 73.1% of the conclusive biopsies. Eight patients had perioperative complications, including low-grade fevers (2) perirenal/retroperitonal hematoma (2), pleural tear/pneumothorax (2), CHF exacerbation, and wound infection. Conclusions: In our multicenter experience, renal biopsy of 138 renal lesions at the time of laparoscopic RFA had a diagnostic yield of 94.2%. RCC was diagnosed in 68.8% of the patients, and in 73.1% of the conclusive biopsies.
Journal of endourology
https://doi.org/10.1089/end.2008.9717
10.1089/end.2008.9717
Fingerprint Dive into the research topics of 'Diagnostic yield of renal biopsy immediately prior to laparoscopic radiofrequency ablation: A multicenter study'. Together they form a unique fingerprint.
Radiofrequency Ablation Medicine & Life Sciences
Multicenter Studies Medicine & Life Sciences
Biopsy Medicine & Life Sciences
Angiomyolipoma Medicine & Life Sciences
Cryotherapy Medicine & Life Sciences
Needle Biopsy Medicine & Life Sciences
Kyle, C. C., Wingo, M. S., Carey, R. I., Leveillee, R. J., & Bird, V. G. (2008). Diagnostic yield of renal biopsy immediately prior to laparoscopic radiofrequency ablation: A multicenter study. Journal of endourology, 22(10), 2291-2293. https://doi.org/10.1089/end.2008.9717
Diagnostic yield of renal biopsy immediately prior to laparoscopic radiofrequency ablation : A multicenter study. / Kyle, Christopher C.; Wingo, M. Scott; Carey, Robert I.; Leveillee, Raymond J.; Bird, Vincent G.
In: Journal of endourology, Vol. 22, No. 10, 01.10.2008, p. 2291-2293.
Kyle, CC, Wingo, MS, Carey, RI, Leveillee, RJ & Bird, VG 2008, 'Diagnostic yield of renal biopsy immediately prior to laparoscopic radiofrequency ablation: A multicenter study', Journal of endourology, vol. 22, no. 10, pp. 2291-2293. https://doi.org/10.1089/end.2008.9717
Kyle CC, Wingo MS, Carey RI, Leveillee RJ, Bird VG. Diagnostic yield of renal biopsy immediately prior to laparoscopic radiofrequency ablation: A multicenter study. Journal of endourology. 2008 Oct 1;22(10):2291-2293. https://doi.org/10.1089/end.2008.9717
Kyle, Christopher C. ; Wingo, M. Scott ; Carey, Robert I. ; Leveillee, Raymond J. ; Bird, Vincent G. / Diagnostic yield of renal biopsy immediately prior to laparoscopic radiofrequency ablation : A multicenter study. In: Journal of endourology. 2008 ; Vol. 22, No. 10. pp. 2291-2293.
@article{ce7a077e074e49e29b422e0ea0ff4125,
title = "Diagnostic yield of renal biopsy immediately prior to laparoscopic radiofrequency ablation: A multicenter study",
abstract = "Introduction: Ablative therapy is increasing for the management of small renal masses. Laparoscopic as well as percutaneous cryotherapy and radiofrequency ablation (RFA) have been utilized. Herein we review our experience with renal biopsy immediately prior to laparoscopic RFA. Methods and Materials: A prospectively collected database containing all patients who underwent laparoscopic RFA by three different surgeons at two different institutions was reviewed. Renal biopsies were performed in each patient during transperitoneal laparoscopy after mobilization of the kidney and prior to RFA. The biopsy needle was passed percutaneously via a sheath through the abdominal wall. Multiple core biopsies (3-5) were taken under visual and ultrasonic guidance. All were submitted for permanent pathologic sectioning. Results: 138 patients underwent renal biopsy prior to RFA. Mean tumor size was 3.0 cm (range 1.0-6.9). The mean age was 72 years (range 39-90). There were 42 females and 96 males. Mean blood loss was 28ml (0-400ml). Only 5 patients lost more than 50ml, and in each case the bleeding was associated with complicated renal mobilization and dissection prior to biopsy. Final pathology revealed renal cell carcinoma in 95, oncocytic neoplasm in 26, and angiomyolipoma in 9.8 patients were considered to have nondiagnostic biopsies. In this group, final pathology revealed benign cysts in 3, inconclusive specimens in 3, fibrosis in 1, and normal tissue in 1. Hence, a clear diagnosis was possible in 130 of 138 patients, which is 94.2%. RCC was diagnosed in 68.8% of the patients, and in 73.1% of the conclusive biopsies. Eight patients had perioperative complications, including low-grade fevers (2) perirenal/retroperitonal hematoma (2), pleural tear/pneumothorax (2), CHF exacerbation, and wound infection. Conclusions: In our multicenter experience, renal biopsy of 138 renal lesions at the time of laparoscopic RFA had a diagnostic yield of 94.2%. RCC was diagnosed in 68.8% of the patients, and in 73.1% of the conclusive biopsies.",
author = "Kyle, {Christopher C.} and Wingo, {M. Scott} and Carey, {Robert I.} and Leveillee, {Raymond J.} and Bird, {Vincent G.}",
doi = "10.1089/end.2008.9717",
journal = "Journal of Endourology",
publisher = "Mary Ann Liebert Inc.",
T1 - Diagnostic yield of renal biopsy immediately prior to laparoscopic radiofrequency ablation
T2 - A multicenter study
AU - Kyle, Christopher C.
AU - Wingo, M. Scott
AU - Carey, Robert I.
AU - Leveillee, Raymond J.
AU - Bird, Vincent G.
N2 - Introduction: Ablative therapy is increasing for the management of small renal masses. Laparoscopic as well as percutaneous cryotherapy and radiofrequency ablation (RFA) have been utilized. Herein we review our experience with renal biopsy immediately prior to laparoscopic RFA. Methods and Materials: A prospectively collected database containing all patients who underwent laparoscopic RFA by three different surgeons at two different institutions was reviewed. Renal biopsies were performed in each patient during transperitoneal laparoscopy after mobilization of the kidney and prior to RFA. The biopsy needle was passed percutaneously via a sheath through the abdominal wall. Multiple core biopsies (3-5) were taken under visual and ultrasonic guidance. All were submitted for permanent pathologic sectioning. Results: 138 patients underwent renal biopsy prior to RFA. Mean tumor size was 3.0 cm (range 1.0-6.9). The mean age was 72 years (range 39-90). There were 42 females and 96 males. Mean blood loss was 28ml (0-400ml). Only 5 patients lost more than 50ml, and in each case the bleeding was associated with complicated renal mobilization and dissection prior to biopsy. Final pathology revealed renal cell carcinoma in 95, oncocytic neoplasm in 26, and angiomyolipoma in 9.8 patients were considered to have nondiagnostic biopsies. In this group, final pathology revealed benign cysts in 3, inconclusive specimens in 3, fibrosis in 1, and normal tissue in 1. Hence, a clear diagnosis was possible in 130 of 138 patients, which is 94.2%. RCC was diagnosed in 68.8% of the patients, and in 73.1% of the conclusive biopsies. Eight patients had perioperative complications, including low-grade fevers (2) perirenal/retroperitonal hematoma (2), pleural tear/pneumothorax (2), CHF exacerbation, and wound infection. Conclusions: In our multicenter experience, renal biopsy of 138 renal lesions at the time of laparoscopic RFA had a diagnostic yield of 94.2%. RCC was diagnosed in 68.8% of the patients, and in 73.1% of the conclusive biopsies.
AB - Introduction: Ablative therapy is increasing for the management of small renal masses. Laparoscopic as well as percutaneous cryotherapy and radiofrequency ablation (RFA) have been utilized. Herein we review our experience with renal biopsy immediately prior to laparoscopic RFA. Methods and Materials: A prospectively collected database containing all patients who underwent laparoscopic RFA by three different surgeons at two different institutions was reviewed. Renal biopsies were performed in each patient during transperitoneal laparoscopy after mobilization of the kidney and prior to RFA. The biopsy needle was passed percutaneously via a sheath through the abdominal wall. Multiple core biopsies (3-5) were taken under visual and ultrasonic guidance. All were submitted for permanent pathologic sectioning. Results: 138 patients underwent renal biopsy prior to RFA. Mean tumor size was 3.0 cm (range 1.0-6.9). The mean age was 72 years (range 39-90). There were 42 females and 96 males. Mean blood loss was 28ml (0-400ml). Only 5 patients lost more than 50ml, and in each case the bleeding was associated with complicated renal mobilization and dissection prior to biopsy. Final pathology revealed renal cell carcinoma in 95, oncocytic neoplasm in 26, and angiomyolipoma in 9.8 patients were considered to have nondiagnostic biopsies. In this group, final pathology revealed benign cysts in 3, inconclusive specimens in 3, fibrosis in 1, and normal tissue in 1. Hence, a clear diagnosis was possible in 130 of 138 patients, which is 94.2%. RCC was diagnosed in 68.8% of the patients, and in 73.1% of the conclusive biopsies. Eight patients had perioperative complications, including low-grade fevers (2) perirenal/retroperitonal hematoma (2), pleural tear/pneumothorax (2), CHF exacerbation, and wound infection. Conclusions: In our multicenter experience, renal biopsy of 138 renal lesions at the time of laparoscopic RFA had a diagnostic yield of 94.2%. RCC was diagnosed in 68.8% of the patients, and in 73.1% of the conclusive biopsies.
U2 - 10.1089/end.2008.9717
DO - 10.1089/end.2008.9717
JO - Journal of Endourology
JF - Journal of Endourology


text:
using System;
using UnityEngine.Rendering;

namespace UnityEngine.Experimental.Rendering.HDPipeline
{
    public enum TonemappingMode
    {
        None,
        Neutral, // Neutral tonemapper
        ACES,    // ACES Filmic reference tonemapper (custom approximation)
        Custom   // Tweakable artist-friendly curve
    }

    [Serializable, VolumeComponentMenu("Post-processing/Tonemapping")]
    public sealed class Tonemapping : VolumeComponent, IPostProcessComponent
    {
        [Tooltip("Select a tonemapping algorithm to use for the color grading process.")]
        public TonemappingModeParameter mode = new TonemappingModeParameter(TonemappingMode.None);

        [Tooltip("Affects the transition between the toe and the mid section of the curve. A value of 0 means no toe, a value of 1 means a very hard transition.")]
        public ClampedFloatParameter toeStrength = new ClampedFloatParameter(0f, 0f, 1f);

        [Tooltip("Affects how much of the dynamic range is in the toe. With a small value, the toe will be very short and quickly transition into the linear section, and with a longer value having a longer toe.")]
        public ClampedFloatParameter toeLength = new ClampedFloatParameter(0.5f, 0f, 1f);

        [Tooltip("Affects the transition between the mid section and the shoulder of the curve. A value of 0 means no shoulder, a value of 1 means a very hard transition.")]
        public ClampedFloatParameter shoulderStrength = new ClampedFloatParameter(0f, 0f, 1f);

        [Tooltip("Affects how many F-stops (EV) to add to the dynamic range of the curve.")]
        public MinFloatParameter shoulderLength = new MinFloatParameter(0.5f, 0f);

        [Tooltip("Affects how much overshoot to add to the shoulder.")]
        public ClampedFloatParameter shoulderAngle = new ClampedFloatParameter(0f, 0f, 1f);

        [Tooltip("Applies a gamma correction to the whole curve.")]
        public MinFloatParameter gamma = new MinFloatParameter(1f, 0.001f);

        public bool IsActive()
        {
            return mode.value != TonemappingMode.None;
        }
    }

    [Serializable]
    public sealed class TonemappingModeParameter : VolumeParameter<TonemappingMode> { public TonemappingModeParameter(TonemappingMode value, bool overrideState = false) : base(value, overrideState) { } }
}

redpajama_set_name: RedPajamaGithub


After all the "progress" made since World War II in matters pertaining to race, why are we still conspiring to divide humanity into different identity groups based on skin color? Did all the good done by the Civil Rights Movement and the decolonization of the Third World have such little lasting effect?
In this provocative book, Paul Gilroy contends that race-thinking has distorted the finest promises of modern democracy. He compels us to see that fascism was the principal political innovation of the twentieth century—and that its power to seduce did not die in a bunker in Berlin. Aren't we in fact using the same devices the Nazis used in their movies and advertisements when we make spectacles of our identities and differences? Gilroy examines the ways in which media and commodity culture have become preeminent in our lives in the years since the 1960s and especially in the 1980s with the rise of hip-hop and other militancies. With this trend, he contends, much that was wonderful about black culture has been sacrificed in the service of corporate interests and new forms of cultural expression tied to visual technologies. He argues that the triumph of the image spells death to politics and reduces people to mere symbols.


text:
Q: In android I'm trying to figure out how to build a countdowntimer that sets itself from the system clock.  a countdown of time until 2am the next day. say it's 11pm when you start the app. run a 3 hour countdown on the main.xml  this is what I have so far
import java.util.Calendar;
import java.util.GregorianCalendar;

import android.app.Activity;

public class LastCall extends Activity {

public static void main(String[] args){

    Calendar calendar = new GregorianCalendar();

      int hour = calendar.get(Calendar.HOUR);
      int minute = calendar.get(Calendar.MINUTE);
      int timelefthour = 0;
      int timeleftmin = 0;

      if(calendar.get(Calendar.AM_PM) == 1 && hour != 12)

                timelefthour = (12 - hour) + 2;
                timeleftmin = 60 - minute;

      if(calendar.get(Calendar.AM_PM) == 1 && hour == 12)

                    timelefthour = 13;
                    timeleftmin = 60 - minute;

      if(calendar.get(Calendar.AM_PM) == 0 && hour == 12)

                timelefthour = 1;
                timeleftmin = 60 - minute;

      if(calendar.get(Calendar.AM_PM) == 0 && hour <= 2)

                timelefthour = 2 - hour;
                timeleftmin = 60 - minute;

       String lastcall = (Integer.toString(timelefthour) + " hr " + Integer.toString(timeleftmin) + " min ");
      }
    }

A: It would appear you are very incorrectly using the Activity class.
I would suggest you have a read of this page and then re-think your approach:
Android Reference - Activity
You don't use the main method for execution in an Android app.

A: The typical Android Activity class will look something like this:
public class MyActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //This is where you could create all of your objects etc...
    }

    private void MyMethod() {
        //do stuff
    }
}

That is a typical activity.  The setContentView sets the screen to a pre formatted xml layout.  You probably want to create your objects, etc., inside the onCreate function, which is called at the start of an activity.
First I would suggest reading over the basics of the Android Activity class, and maybe making a HelloWorld app to get started.  Also, if you are not already, Android Dev is much easier if you use an nice IDE, such as Eclipse.  The IDE will do a lot of the manual stuff for you and you can just focus on coding.
Here is a nice link:  http://developer.android.com/resources/tutorials/hello-world.html

redpajama_set_name: RedPajamaStackExchange


text: <script src="gofmt.js" type="text/javascript"></script>


text:
Volume 23 Number 3, October 2019 Special Issue: New Developments in Virtual Exchange in Foreign Language Education New developments in virtual exchange in foreign language education
New developments in virtual exchange in foreign language education
Repository record updated on:
Oct. 24, 2019, 1:27 a.m.
Database record updated on:
Nov. 18, 2019, 11:36 p.m.
Last Harvested on:
bitstream:
http://scholarspace.manoa.hawaii.edu/bitstream/10125/44690/1/23_3_10125-44690.pdf
bitstream_txt:
http://scholarspace.manoa.hawaii.edu/bitstream/10125/44690/2/23_3_10125-44690.pdf.txt
Volume 23 Number 3, October 2019 Special Issue: New Developments in Virtual Exchange in Foreign Language Education
contributor.author:
O'Dowd, Robert O'Rourke, Breffni
date.accessioned:
date.available:
date.issued:
description.provenance:
Made available in DSpace on 2019-10-22T17:10:38Z (GMT). No. of bitstreams: 1 23_3_10125-44690.pdf: 197367 bytes, checksum: fe0324f9723e032929a51b8bf7401ee1 (MD5) Previous issue date: 2019-10-17
endingpage:
identifier.citation:
O'Dowd, R., & O'Rourke, B. (2019). New developments in virtual exchange in foreign language education. Language Learning & Technology, 23(3), 1–7. https://doi.org/10125/44690
identifier.doi:
identifier.issn:
identifier.uri:
University of Hawaii National Foreign Language Resource Center University of Texas at Austin Center for Open Educational Resources and Language Learning
site_url:
/item/3114
startingpage:
type.dcmi:

redpajama_set_name: RedPajamaCommonCrawl


People who score well in financial literacy tests are more likely to engage in retirement planning and saving, and are more likely to invest smarter in their retirement plans. The Pension Research Council (PRC) has found that 30-40% of retirement wealth inequality can be accounted for by financial knowledge.1 Therefore, the PRC's goal is to have every high school student attain at least a minimum competency in financial education. I agree that financial literacy should be taught and tested in the classroom, but I also believe that the most powerful lessons can only be taught outside of the classroom.
The ideal thing to do with a money gift is to put it in the bank–I learned that much from my elementary school teacher. But all these ideal scenarios came from the pages of a textbook. I became a whiz at math and compound interest, and understood that saving pennies was better than spending them on candy; however, all this knowledge was abstract and disembodied from everyday life.
Saving is fun. My 5-year-old daughter has a pink piggybank, my 8-year-old son a green one. Both are translucent enough to see inside of. For her, there's a "wow" factor in seeing the money accumulate–she loves how heavy it feels. Old enough to own an actual bank account, my son watches how his money goes in, and how his balance goes up. It's a nice feeling. When I was a child, you'd get a small, bound paper passbook with your savings account, making my possession of an account all the more tangible. Just as bibliophiles favor touchable, smellable tomes to their digital equivalents, I like having a physical object for nostalgia's sake. And when it comes to teaching kids, I find it to be a more effective tool than even the most well-designed app.
Money is nothing to be afraid of. "Chrometophobia" has nothing to do with colors or Internet browsers; it's the fear of money. Though "phobia" might be too strong a word, many people have at least an aversion to financial matters. As a parent, you can demystify grown-up stuff like investing and credit cards for your children early on. The more conversations you have with your 8-year-old about money and the market, the less scary they seem. It's amazing how many adults think of finance as some sort of boogeyman, and the stock market as some kind of casino. Many of my clients only begin paying attention when forced to by their first paycheck. We need to get people attuned to finances long before that, in high school or college. In my opinion, you're never too young to learn the basics of financial responsibility. Money worries can be one of life's great misery makers, so it's your duty as a loving aunt, uncle or friend to encourage not only thrift, but also for our loved ones to be unafraid of finances.
Every treat has an opportunity cost. Treats don't just fall out of the sky (or down the chimney). They cost money–money that might otherwise have been invested. You don't need to take away the magic of gift-giving, nor reduce everything to its monetary value, in order to teach your child about financial trade-offs. You can simply empower your child to make choices. Chances are that most of the time he will opt for the toy, but every now and then he may decide to save instead (remember, you've already convinced him that saving is fun). On his last birthday, I gave my son the option of spending $200 on a party or $100 on a smaller gathering, with the remaining $100 put into his savings account along with a parental match. 8-year-olds are surprisingly open to the idea of deferred gratification, if you add a sweetener.
It takes money to make money. Compounding is such an abstract concept that many adults struggle to fully grasp it. Kids, even more so. That's because the benefits become more apparent over the long term. When I show my 8-year-old what we've deposited compared to his end balance, he does get the basic idea that money can grow, much like his own height, as evidenced by the purple chalk marks on the basement doorframe. But his savings account doesn't experience the same dramatic growth spurts. To better illustrate how compound interest is "money on top of money," I showed him performance charts from my 529 college savings plan, opened on his behalf eight years ago, and therefore, more impressively compounded. (It helps that the funds were tied to stocks, during the second-longest bull market on record).
Don't be afraid to get help. That help may come from technology, which is becoming sophisticated at correcting our human flaws. But first you need to take a good look in the mirror and be honest with yourself about your financial flaws. The more honest you are, the likelier you are to put guardrails in place to facilitate saving, such as automated payments.
While reading and math are basic life skills taught in elementary school, it mostly falls on parents and loved ones to teach financial literacy. And if you missed out on that as a child, it's up to you to learn now. The good news is that help is out there–in the form of how-to videos online, free one-on-ones with a TIAA financial advisor, and free Financial Essentials workshops. Because as any parent knows, hands-on lessons are the best.
1 Stock investing involves risk including loss of principal.


Mama's stew is a song that discribes the love and care my Mother put into her stew and work. It is a mediphore of the care she had in us. And how She pasted on but she gave that same love and reciept to my wife.


S'Wheat Caroline, UW student-crafted beer chosen by the Wisconsin Brewing Company to go into commercial production later this spring.
Last week, a panel of expert judges selected the next beer to be produced through the university's Campus Craft Brewery, a collaboration between the UW-Madison Department of Food Science and the Wisconsin Brewing Company (WBC). The winning beer, an American wheat ale named S'Wheat Caroline, was developed by Daniel Deveney, a junior in mechanical engineering; Jenna Fantle, a senior in food science; and Eric Kretsch, a senior in microbiology.
The competition was held last Wednesday, after weeks of experimentation within food science professor Jim Steele's Fermented Foods and Beverages course. Six student teams participated in the contest, each presenting a wheat beer of their design to a panel of expert judges from WBC, MillerCoors, Lake Louis Brewing and the Wisconsin Union.
This is the second year of the Campus Craft Brewery program. This endeavor once again gives students an excellent hands-on opportunity to craft a recipe, source ingredients, consult with experts, create a beer and have it judged. The class culminates with all the students taking part in full-scale commercial brewing of the winning beer at WBC.
S'Wheat Caroline will be first released in May 2016 at the Sett in Union South and distribution across Wisconsin will follow.
For more information, see the NBC news video segment on the winning brew.
This entry was posted in Highlights and tagged food science by shibtester. Bookmark the permalink.


Where is everyone, why don't you sail on a Sunday please let us know.
Anyway thanks to kath and gwyl for being race officers.
A big well done for one of our juniors Elin J in a club Feva who won the last race. See you all soon.


REAL VISION RADIO IS AN ONLINE MUSIC AND TALK SHOW STREAMING WEBSITE. WE HERE AT REAL VISION RADIO PRIDE OUR WORK ON PROVIDING A SPACE FOR THE UNDERGROUND AND INDEPENDANT ARTIST TO DISPLAY THEIR TALENT AND HARDWORK TO THE MASSES. WE BELIEVE THAT THE UNDERSERVED DESERVES A SPACE AT THE TABLE, ALONG WITH THE MAJOR ARTIST THAT WE SEE EVERYDAY IN THE MAINSTREAM.
NOT JUST FOR THE MUSICALLY INCLINED, WE ALSO CATER TO ENTREPENEURS, INVENTORS, ACTIVISTS AND FILMMAKERS. WE FEEL THAT BROADENING OUR SCOPE OUTSIDE OF JUST THE MUSIC WILL HELP EVERYONE IN THEIR GOALS. EVERYONE NEEDS SOMEONE WITH A SKILL AND TALENT. WE LOVE CONNECTING GREAT MINDS, THAT COULD BENEFIT ONE ANOTHER.
THIS TASK IS NOT AN EASY ONE, BUT A TASK THAT WE ARE UP FOR THE CHALLENGE FOR.
IF YOU UNDERTSAND OUR GOAL, THEN YOUR PLACE IS RIGHT HERE WITH US.
WELCOME TO THE REAL VISION RADIO FAMILY. STAY AWHILE AND KICK IT WITH US!


Weather in Chicago is windy, chilly (7 degrees below zero wind chill factor) and snowy so what better thing to do than to take an escape break from everything -- including work -- to enjoy what mother nature has given us. Here are a couple of photos taken along the Chicago lakefront and not too far from where I live and work. The snow angel just happens to be wearing my ski hat.


This beautiful 2 bedroom + Den home with sparkling pool located in the San Tan Heights subdivision and is perfect for the investor that is looking for a great home with an excellent tenant already in place! This home features eat in kitchen with range, dishwasher, disposal, pantry, bay window, and breakfast bar. Enjoy the upgraded beautiful wood vinyl flooring throughout the home. Nice size living room with a sliding glass door to your backyard retreat! Enjoy those hot summer days by the beautiful built in pool, covered patio with ceiling fan and misting system. You won't want to leave your energy efficient home! Come see this home today. This home is currently rented until March of 2020 for $1315 per month.


Sign up and receive Property Email Alerts of Houses to let in Airport Hills, Accra.
Sitting on 0.35acres , is this grand 7 bedroom property boasting of well manicured gardens, ample parking space and spacious interiors within a serene gated community.
An access door off the family area leads to a garden area and open-air swimming pool leading to a grill house. The property further benefits from a 2 bedroom outhouse, electric fencing for added security, standby generator, and reserve water tanks for added convenience.
Sign-up and receive Property Email Alerts of Houses to let in Airport Hills, Accra.


To administer the Level of Service assessments, training is required for those who do not have the requisite b-level educational qualifications. Training is also recommended for those who need in-depth knowledge of the tools and their use and interpretation. By attending our User Training, you will learn necessary skills for interviewing an offender, accurately scoring a Level of Service assessment, as well as enhancing the quality of case management, treatment planning, and service delivery. Individuals interested in becoming a Level of Service Trainer or Master Trainer should complete a Trainer Training session. For further details on becoming an MHS User, Trainer, or Master Trainer, please contact us at lscmi_training@mhs.com. To find a Master Trainer or Trainer in your area, please use the search tool below. On-demand Level of Service trainings are also available through the Global Institute of Forensic Research (GIFR). Visit www.gifrinc.com/trainings-overview for more information.
Organization: AdCare Criminal Justice Services Inc.


text:
#  Copyright 2021 Google Inc. All Rights Reserved.
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

<#
.SYNOPSIS
Duplicates a token to a new token.
.DESCRIPTION
This cmdlet duplicates a token to another with specified
.PARAMETER Token
Specify the token to duplicate. If not specified will use the current process token.
.PARAMETER ImpersonationLevel
If specified will duplicate the token as an impersonation token.
.PARAMETER Primary
If specified will duplicate the token as a primary token.
.PARAMETER Access
Specify the access to the new token object.
.PARAMETER Inherit
Specify the token handle is inheritable.
.PARAMETER SecurityDescriptor
Specify the new token's security descriptor.
.INPUTS
None
.OUTPUTS
NtApiDotNet.NtToken
.EXAMPLE
Copy-NtToken -Primary
Copy the current token as a primary token.
.EXAMPLE
Copy-NtToken -ImpersonationLevel Impersonation
Copy the current token as a primary token.
.EXAMPLE
Copy-NtToken -Primary -Token $token
Copy an existing token as a primary token.
#>
function Copy-NtToken {
    [CmdletBinding(DefaultParameterSetName = "Impersonation")]
    Param(
        [NtApiDotNet.NtToken]$Token,
        [parameter(Mandatory, ParameterSetName = "Impersonation", Position = 0)]
        [NtApiDotNet.SecurityImpersonationLevel]$ImpersonationLevel,
        [parameter(Mandatory, ParameterSetName = "Primary")]
        [switch]$Primary,
        [NtApiDotNet.TokenAccessRights]$Access = "MaximumAllowed",
        [switch]$Inherit,
        [NtApiDotNet.SecurityDescriptor]$SecurityDescriptor
    )

    switch ($PSCmdlet.ParameterSetName) {
        "Impersonation" {
            $tokentype = "Impersonation"
        }
        "Primary" {
            $tokentype = "Primary"
            $ImpersonationLevel = "Anonymous"
        }
    }

    if ($null -eq $Token) {
        $Token = Get-NtToken -Effective
    }
    else {
        $Token = $Token.Duplicate()
    }

    $attributes = "None"
    if ($Inherit) {
        $attributes = "Inherit"
    }

    Use-NtObject($Token) {
        $Token.DuplicateToken($tokentype, $ImpersonationLevel, $Access, $attributes, $SecurityDescriptor)
    }
}

<#
.SYNOPSIS
Get a token's ID values.
.DESCRIPTION
This cmdlet will get Token's ID values such as Authentication ID and Origin ID.
.PARAMETER Authentication
Specify to get authentication Id.
.PARAMETER Origin
Specify to get origin Id.
.PARAMETER Modified
Specify to get modified Id.
.PARAMETER Token
Optional token object to use to get ID. Must be accesible for Query right.
.INPUTS
None
.OUTPUTS
NtApiDotNet.Luid
.EXAMPLE
Get-NtTokenId
Get the Token ID field.
.EXAMPLE
Get-NtTokenId -Token $token
Get Token ID on an explicit token object.
.EXAMPLE
Get-NtTokenId -Authentication
Get the token's Authentication ID.
.EXAMPLE
Get-NtTokenId -Origin
Get the token's Origin ID.
#>
function Get-NtTokenId {
    [CmdletBinding(DefaultParameterSetName="FromId")]
    Param(
        [NtApiDotNet.NtToken]$Token,
        [Parameter(Mandatory, ParameterSetName="FromOrigin")]
        [switch]$Origin,
        [Parameter(Mandatory, ParameterSetName="FromAuth")]
        [switch]$Authentication,
        [Parameter(Mandatory, ParameterSetName="FromModified")]
        [switch]$Modified
    )
    if ($null -eq $Token) {
        $Token = Get-NtToken -Effective -Access Query
    }
    elseif (!$Token.IsPseudoToken) {
        $Token = $Token.Duplicate()
    }

    Use-NtObject($Token) {
        if ($Origin) {
            $Token.Origin | Write-Output
        } elseif ($Authentication) {
            $Token.AuthenticationId
        } elseif ($Modified) {
            $Token.ModifiedId
        } else {
            $Token.Id
        }
    }
}

<#
.SYNOPSIS
Enables virtualization on a Access Token or Process.
.DESCRIPTION
This cmdlet enables virtualization on an Access Token or Process.
.PARAMETER Token
Specify the token to modify.
.PARAMETER Process
Specify the process to modify.
.INPUTS
None
.OUTPUTS
None
.EXAMPLE
Enable-NtTokenVirtualization
Enable virtualization on the current primary token.
.EXAMPLE
Enable-NtTokenVirtualization -Token $token
Enable virtualization on a specific token.
.EXAMPLE
Enable-NtTokenVirtualization -Process $proc
Enable virtualization on a specific process.
#>
function Enable-NtTokenVirtualization {
    [CmdletBinding(DefaultParameterSetName = "FromProcess")]
    Param(
        [parameter(Mandatory, Position = 0, ParameterSetName="FromToken")]
        [NtApiDotNet.NtToken]$Token,
        [parameter(Position = 0, ParameterSetName="FromProcess")]
        [NtApiDotNet.NtProcess]$Process
    )
    switch($PSCmdlet.ParameterSetName) {
        "FromProcess" {
            if ($null -EQ $Process) {
                $Process = Get-NtProcess -Current
            }
            $Process.VirtualizationEnabled = $true
        }
        "FromToken" {
            $Token.VirtualizationEnabled = $true
        }
    }
}

<#
.SYNOPSIS
Disables virtualization on a Access Token or Process.
.DESCRIPTION
This cmdlet disables virtualization on an Access Token or Process.
.PARAMETER Token
Specify the token to modify.
.PARAMETER Process
Specify the process to modify.
.INPUTS
None
.OUTPUTS
None
.EXAMPLE
Disable-NtTokenVirtualization
Disable virtualization on the current primary token.
.EXAMPLE
Disable-NtTokenVirtualization -Token $token
Disable virtualization on a specific token.
.EXAMPLE
Disable-NtTokenVirtualization -Process $proc
Disable virtualization on a specific process.
#>
function Disable-NtTokenVirtualization {
    [CmdletBinding(DefaultParameterSetName = "FromProcess")]
    Param(
        [parameter(Mandatory, Position = 0, ParameterSetName="FromToken")]
        [NtApiDotNet.NtToken]$Token,
        [parameter(Position = 0, ParameterSetName="FromProcess")]
        [NtApiDotNet.NtProcess]$Process
    )
    switch($PSCmdlet.ParameterSetName) {
        "FromProcess" {
            if ($null -EQ $Process) {
                $Process = Get-NtProcess -Current
            }
            $Process.VirtualizationEnabled = $false
        }
        "FromToken" {
            $Token.VirtualizationEnabled = $false
        }
    }
}

<#
.SYNOPSIS
Check if a token has a specified capability.
.DESCRIPTION
This cmdlet checks if a token has a specified capability. This is primarily for checking AppContainer tokens.
.PARAMETER Token
Specify the token to check. If you do not specify the token then the effective token is used.
.PARAMETER Name
The name of the capability to check.
.INPUTS
None
.OUTPUTS
Boolean
#>
function Test-NtTokenCapability {
    [CmdletBinding()]
    param (
        [parameter(Mandatory, Position = 0)]
        [string]$Name,
        [NtApiDotNet.NtToken]$Token
    )

    if ($null -eq $Token) {
        [NtApiDotNet.NtSecurity]::CapabilityCheck($null, $Name)
    } else {
        $Token.CapabilityCheck($Name)
    }
}

<#
.SYNOPSIS
Set the state of a token's privileges.
.DESCRIPTION
This cmdlet will set the state of a token's privileges. This is commonly used to enable debug/backup privileges to perform privileged actions.
If no token is specified then the current effective token is used.
.PARAMETER Privilege
A list of privileges to set their state.
.PARAMETER Token
Optional token object to use to set privileges. Must be accesible for AdjustPrivileges right.
.PARAMETER Attribute
Specify the actual attributes to set. Defaults to Enabled.
.PARAMETER All
Set attributes for all privileges in the token.
.PARAMETER PassThru
Passthrough the updated privilege results.
.PARAMETER Disable
Disable the specified privileges.
.INPUTS
None
.OUTPUTS
List of TokenPrivilege values indicating the new state of all privileges successfully modified.
.EXAMPLE
Set-NtTokenPrivilege SeDebugPrivilege
Enable SeDebugPrivilege on the current effective token
.EXAMPLE
Set-NtTokenPrivilege SeDebugPrivilege -Attributes Disabled
Disable SeDebugPrivilege on the current effective token
.EXAMPLE
Set-NtTokenPrivilege SeBackupPrivilege, SeRestorePrivilege -Token $token
Enable SeBackupPrivilege and SeRestorePrivilege on an explicit token object.
#>
function Set-NtTokenPrivilege {
    [CmdletBinding(DefaultParameterSetName = "FromPrivilege")]
    Param(
        [NtApiDotNet.NtToken]$Token,
        [Parameter(Mandatory, Position = 0, ParameterSetName = "FromPrivilege")]
        [alias("Privileges")]
        [NtApiDotNet.TokenPrivilegeValue[]]$Privilege,
        [alias("Attributes")]
        [NtApiDotNet.PrivilegeAttributes]$Attribute = "Enabled",
        [switch]$Disable,
        [Parameter(Mandatory, ParameterSetName = "FromAllAttributes")]
        [switch]$All,
        [switch]$PassThru
    )

    if ($null -eq $Token) {
        $Token = Get-NtToken -Effective
    }
    else {
        $Token = $Token.Duplicate()
    }

    if ($Disable) {
        $Attribute = "Disabled"
    }

    if ($All) {
        $Privilege = $Token.Privileges.Value
    }

    Use-NtObject($Token) {
        $result = @()
        foreach ($priv in $Privilege) {
            if ($Token.SetPrivilege($priv, $Attribute)) {
                $result += @($Token.GetPrivilege($priv))
            }
            else {
                Write-Warning "Couldn't set privilege $priv"
            }
        }
        if ($PassThru) {
            $result | Write-Output
        }
    }
}

<#
.SYNOPSIS
Enable a token's privileges.
.DESCRIPTION
This cmdlet will enable a token's privileges. This is commonly used to enable debug/backup privileges to perform privileged actions.
If no token is specified then the current effective token is used.
.PARAMETER Privilege
A list of privileges to enable.
.PARAMETER Token
Optional token object to use to enable privileges. Must be accesible for AdjustPrivileges right.
.PARAMETER PassThru
Passthrough the updated privilege results.
.INPUTS
None
.OUTPUTS
List of TokenPrivilege values indicating the new state of all privileges successfully modified.
.EXAMPLE
Enable-NtTokenPrivilege SeDebugPrivilege
Enable SeDebugPrivilege on the current effective token
.EXAMPLE
Enable-NtTokenPrivilege SeBackupPrivilege, SeRestorePrivilege -Token $token
Enable SeBackupPrivilege and SeRestorePrivilege on an explicit token object.
#>
function Enable-NtTokenPrivilege {
    [CmdletBinding(DefaultParameterSetName = "FromPrivilege")]
    Param(
        [NtApiDotNet.NtToken]$Token,
        [Parameter(Mandatory, Position = 0, ParameterSetName = "FromPrivilege")]
        [alias("Privileges")]
        [NtApiDotNet.TokenPrivilegeValue[]]$Privilege,
        [switch]$PassThru
    )

    Set-NtTokenPrivilege -Token $Token -Privilege $Privilege -PassThru:$PassThru -Attribute Enabled
}

<#
.SYNOPSIS
Disable a token's privileges.
.DESCRIPTION
This cmdlet will disable a token's privileges. If no token is specified then the current effective token is used.
.PARAMETER Privilege
A list of privileges to disable.
.PARAMETER Token
Optional token object to use to disable privileges. Must be accesible for AdjustPrivileges right.
.PARAMETER PassThru
Passthrough the updated privilege results.
.INPUTS
None
.OUTPUTS
List of TokenPrivilege values indicating the new state of all privileges successfully modified.
.EXAMPLE
Disable-NtTokenPrivilege SeDebugPrivilege
Disable SeDebugPrivilege on the current effective token
.EXAMPLE
Disable-NtTokenPrivilege SeBackupPrivilege, SeRestorePrivilege -Token $token
Disable SeBackupPrivilege and SeRestorePrivilege on an explicit token object.
#>
function Disable-NtTokenPrivilege {
    [CmdletBinding(DefaultParameterSetName = "FromPrivilege")]
    Param(
        [NtApiDotNet.NtToken]$Token,
        [Parameter(Mandatory, Position = 0, ParameterSetName = "FromPrivilege")]
        [alias("Privileges")]
        [NtApiDotNet.TokenPrivilegeValue[]]$Privilege,
        [switch]$PassThru
    )

    Set-NtTokenPrivilege -Token $Token -Privilege $Privilege -PassThru:$PassThru -Attribute Disabled
}

<#
.SYNOPSIS
Get the state of a token's privileges.
.DESCRIPTION
This cmdlet will get the state of a token's privileges.
.PARAMETER Privilege
A list of privileges to get their state.
.PARAMETER Token
Optional token object to use to get privileges. Must be accesible for Query right.
.INPUTS
None
.OUTPUTS
List of TokenPrivilege values indicating the state of all privileges requested.
.EXAMPLE
Get-NtTokenPrivilege
Get all privileges on the current Effective token.
.EXAMPLE
Get-NtTokenPrivilege -Token $token
Get all privileges on an explicit  token.
.EXAMPLE
Get-NtTokenPrivilege -Privilege SeDebugPrivilege
Get state of SeDebugPrivilege on the current process token
.EXAMPLE
Get-NtTokenPrivilege -Privilege SeBackupPrivilege, SeRestorePrivilege -Token $token
Get SeBackupPrivilege and SeRestorePrivilege status on an explicit token object.
#>
function Get-NtTokenPrivilege {
    Param(
        [Parameter(Position = 0, ValueFromPipeline)]
        [NtApiDotNet.NtToken]$Token,
        [alias("Privileges")]
        [NtApiDotNet.TokenPrivilegeValue[]]$Privilege
    )
    if ($null -eq $Token) {
        $Token = Get-NtToken -Effective -Access Query
    }
    elseif (!$Token.IsPseudoToken) {
        $Token = $Token.Duplicate()
    }

    Use-NtObject($Token) {
        if ($null -ne $Privilege -and $Privilege.Count -gt 0) {
            foreach ($priv in $Privilege) {
                $val = $Token.GetPrivilege($priv)
                if ($null -ne $val) {
                    $val | Write-Output
                }
                else {
                    Write-Warning "Couldn't get privilege $priv"
                }
            }
        }
        else {
            $Token.Privileges | Write-Output
        }
    }
}

<#
.SYNOPSIS
Get a token's groups.
.DESCRIPTION
This cmdlet will get the groups for a token.
.PARAMETER Token
Optional token object to use to get groups. Must be accesible for Query right.
.PARAMETER Restricted
Return the restricted SID list.
.PARAMETER Capabilities
Return the capability SID list.
.PARAMETER Attributes
Specify attributes to filter group list on.
.INPUTS
None
.OUTPUTS
List of UserGroup values indicating the state of all groups.
.EXAMPLE
Get-NtTokenGroup
Get all groups on the effective process token
.EXAMPLE
Get-NtTokenGroup -Token $token
Get groups on an explicit token object.
.EXAMPLE
Get-NtTokenGroup -Attributes Enabled
Get groups that are enabled.
#>
function Get-NtTokenGroup {
    [CmdletBinding(DefaultParameterSetName = "Normal")]
    Param(
        [Parameter(Position = 0, ValueFromPipeline)]
        [NtApiDotNet.NtToken]$Token,
        [Parameter(Mandatory, ParameterSetName = "Restricted")]
        [switch]$Restricted,
        [Parameter(Mandatory, ParameterSetName = "Capabilities")]
        [switch]$Capabilities,
        [Parameter(Mandatory, ParameterSetName = "Device")]
        [switch]$Device,
        [NtApiDotNet.GroupAttributes]$Attributes = 0
    )
    if ($null -eq $Token) {
        $Token = Get-NtToken -Effective -Access Query
    }
    elseif (!$Token.IsPseudoToken) {
        $Token = $Token.Duplicate()
    }

    Use-NtObject($Token) {
        $groups = if ($Restricted) {
            $Token.RestrictedSids
        }
        elseif ($Capabilities) {
            $Token.Capabilities
        }
        elseif ($Device) {
            $Token.DeviceGroups
        }
        else {
            $Token.Groups
        }

        if ($Attributes -ne 0) {
            $groups = $groups | Where-Object { ($_.Attributes -band $Attributes) -eq $Attributes }
        }

        $groups | Write-Output
    }
}

<#
.SYNOPSIS
Sets a token's group state.
.DESCRIPTION
This cmdlet will sets the state of groups for a token.
.PARAMETER Token
Optional token object to use to set groups. Must be accesible for AdjustGroups right.
.PARAMETER Sid
Specify the list of SIDs to set.
.PARAMETER Attributes
Specify the attributes to set on the SIDs.
.INPUTS
None
.OUTPUTS
None
.EXAMPLE
Set-NtTokenGroup -Sid "WD" -Attributes 0
Set the Everyone SID to disabled.
.EXAMPLE
Set-NtTokenGroup -Sid "WD" -Attributes Enabled
Set the Everyone SID to enabled.
#>
function Set-NtTokenGroup {
    [CmdletBinding()]
    Param(
        [NtApiDotNet.NtToken]$Token,
        [Parameter(Mandatory, Position = 0)]
        [NtApiDotNet.Sid[]]$Sid,
        [Parameter(Mandatory, Position = 1)]
        [NtApiDotNet.GroupAttributes]$Attributes
    )
    if ($null -eq $Token) {
        $Token = Get-NtToken -Effective -Access AdjustGroups
    }
    else {
        $Token = $Token.Duplicate()
    }

    Use-NtObject($Token) {
        $Token.SetGroups($Sid, $Attributes)
    }
}

<#
.SYNOPSIS
Resets a token's group state.
.DESCRIPTION
This cmdlet will resets the state of groups for a token.
.PARAMETER Token
Optional token object to use to reset groups. Must be accesible for AdjustGroups right.
.INPUTS
None
.OUTPUTS
None
.EXAMPLE
Reset-NtTokenGroup
Reset the groups for the current token.
.EXAMPLE
Reset-NtTokenGroup -Token $token
Reset the groups for the a specified token.
#>
function Reset-NtTokenGroup {
    [CmdletBinding()]
    Param(
        [NtApiDotNet.NtToken]$Token
    )
    if ($null -eq $Token) {
        $Token = Get-NtToken -Effective -Access AdjustGroups
    }
    else {
        $Token = $Token.Duplicate()
    }

    Use-NtObject($Token) {
        $Token.ResetGroups()
    }
}

<#
.SYNOPSIS
Enable a token's group.
.DESCRIPTION
This cmdlet will enable one or more groups on a token. They can't be marked as mandatory.
.PARAMETER Token
Optional token object to use to enable groups. Must be accesible for AdjustGroups right.
.PARAMETER Sid
Specify the list of group SIDs to enable.
.INPUTS
None
.OUTPUTS
None
.EXAMPLE
Enable-NtTokenGroup -Sid "WD"
Enable the Everyone SID for the current token.
.EXAMPLE
Enable-NtTokenGroup -Sid "WD" -Token $token
Enable the Everyone SID on a specified token.
#>
function Enable-NtTokenGroup {
    [CmdletBinding()]
    Param(
        [NtApiDotNet.NtToken]$Token,
        [Parameter(Mandatory, Position = 0)]
        [NtApiDotNet.Sid[]]$Sid
    )

    Set-NtTokenGroup -Token $Token -Sid $Sid -Attributes Enabled
}

<#
.SYNOPSIS
Disable a token's group.
.DESCRIPTION
This cmdlet will disable one or more groups on a token. They can't be marked as mandatory.
.PARAMETER Token
Optional token object to use to disable groups. Must be accesible for AdjustGroups right.
.PARAMETER Sid
Specify the list of group SIDs to disable.
.INPUTS
None
.OUTPUTS
None
.EXAMPLE
Disable-NtTokenGroup -Sid "WD"
Disable the Everyone SID for the current token.
.EXAMPLE
Disable-NtTokenGroup -Sid "WD" -Token $token
Disable the Everyone SID on a specified token.
#>
function Disable-NtTokenGroup {
    [CmdletBinding()]
    Param(
        [NtApiDotNet.NtToken]$Token,
        [Parameter(Mandatory, Position = 0)]
        [NtApiDotNet.Sid[]]$Sid
    )

    Set-NtTokenGroup -Token $Token -Sid $Sid -Attributes Enabled
}

<#
.SYNOPSIS
Get a token's user SID or one of the other single SID values.
.DESCRIPTION
This cmdlet will get user SID for a token. Or one of the other SIDs such as Owner.
.PARAMETER Owner
Specify to get the owner.
.PARAMETER Group
Specify to get the default group.
.PARAMETER Integrity
Specify to get the integrity level.
.PARAMETER TrustLevel
Specify to get the process trust level.
.PARAMETER LogonId
Specify to get the logon SID.
.PARAMETER Package
Specify to get the AppContainer package SID.
.PARAMETER Token
Optional token object to use to get SID. Must be accesible for Query right.
.PARAMETER AsSddl
Specify to convert the SID to SDDL.
.PARAMETER AsName
Specify to convert the SID to a name.
.INPUTS
None
.OUTPUTS
NtApiDotNet.Sid
.EXAMPLE
Get-NtTokenSid
Get user SID on the current effective token
.EXAMPLE
Get-NtTokenSid -Token $token
Get user SID on an explicit token object.
.EXAMPLE
Get-NtTokenSid -Group
Get the default group SID.
.EXAMPLE
Get-NtTokenSid -Owner
Get the default owner SID.
#>
function Get-NtTokenSid {
    [CmdletBinding(DefaultParameterSetName = "User")]
    Param(
        [Parameter(Position = 0, ValueFromPipeline)]
        [NtApiDotNet.NtToken]$Token,
        [Parameter(Mandatory, ParameterSetName = "Owner")]
        [switch]$Owner,
        [Parameter(Mandatory, ParameterSetName = "Group")]
        [switch]$Group,
        [Parameter(Mandatory, ParameterSetName = "TrustLevel")]
        [switch]$TrustLevel,
        [Parameter(Mandatory, ParameterSetName = "Login")]
        [switch]$LogonId,
        [Parameter(Mandatory, ParameterSetName = "Integrity")]
        [switch]$Integrity,
        [Parameter(Mandatory, ParameterSetName = "Package")]
        [switch]$Package,
        [alias("ToSddl")]
        [switch]$AsSddl,
        [alias("ToName")]
        [switch]$AsName
    )
    if ($null -eq $Token) {
        $Token = Get-NtToken -Effective -Access Query
    }
    elseif (!$Token.IsPseudoToken) {
        $Token = $Token.Duplicate()
    }

    Use-NtObject($Token) {
        $sid = switch ($PsCmdlet.ParameterSetName) {
            "User" { $Token.User.Sid }
            "Owner" { $Token.Owner }
            "Group" { $Token.PrimaryGroup }
            "TrustLevel" { $Token.TrustLevel }
            "Login" { $Token.LogonSid.Sid }
            "Integrity" { $Token.IntegrityLevelSid.Sid }
            "Package" { $Token.AppContainerSid }
        }

        if ($AsSddl) {
            $sid.ToString() | Write-Output
        }
        elseif ($AsName) {
            $sid.Name | Write-Output
        }
        else {
            $sid | Write-Output
        }
    }
}

<#
.SYNOPSIS
Set a token SID.
.DESCRIPTION
This cmdlet will set a SID on the token such as default owner or group.
.PARAMETER Owner
Specify to set the default owner.
.PARAMETER Group
Specify to set the default group.
.PARAMETER Integrity
Specify to set the integrity level.
.PARAMETER Token
Optional token object to use to set group. Must be accesible for AdjustDefault right.
.PARAMETER Sid
Specify the SID to set.
.INPUTS
None
.OUTPUTS
None
.EXAMPLE
Set-NtTokenSid -Owner -Sid "S-1-2-3-4"
Set default owner on the current effective token
.EXAMPLE
Set-NtTokenOwner -Owner -Token $token -Sid "S-1-2-3-4"
Set default owner on an explicit token object.
.EXAMPLE
Set-NtTokenOwner -Group -Sid "S-1-2-3-4"
Set the default group.
#>
function Set-NtTokenSid {
    [CmdletBinding(DefaultParameterSetName = "Normal")]
    Param(
        [Parameter(Position = 1)]
        [NtApiDotNet.NtToken]$Token,
        [Parameter(Mandatory, Position = 0)]
        [NtApiDotNet.Sid]$Sid,
        [Parameter(Mandatory, ParameterSetName = "Owner")]
        [switch]$Owner,
        [Parameter(Mandatory, ParameterSetName = "Group")]
        [switch]$Group,
        [Parameter(Mandatory, ParameterSetName = "Integrity")]
        [switch]$Integrity
    )
    if ($null -eq $Token) {
        $Token = Get-NtToken -Effective -Access AdjustDefault
    }
    else {
        $Token = $Token.Duplicate()
    }

    Use-NtObject($Token) {
        switch ($PsCmdlet.ParameterSetName) {
            "Owner" { $Token.Owner = $Sid }
            "Group" { $Token.PrimaryGroup = $Sid }
            "Integrity" { $Token.IntegrityLevelSid = $sid }
        } }
}

<#
.SYNOPSIS
Get a token's default owner or group.
.DESCRIPTION
This cmdlet will get the default owner or group for a token.
.PARAMETER Group
Specify to get the default group rather than default owner.
.PARAMETER Token
Optional token object to use to get group. Must be accesible for Query right.
.INPUTS
None
.OUTPUTS
UserGroup for the owner.
.EXAMPLE
Get-NtTokenOwner
Get default owner on the current effective token
.EXAMPLE
Get-NtTokenOwner -Token $token
Get default owner on an explicit token object.
.EXAMPLE
Get-NtTokenOwner -Group
Get the default group.
#>
function Get-NtTokenOwner {
    [CmdletBinding()]
    Param(
        [NtApiDotNet.NtToken]$Token,
        [switch]$Group
    )
    if ($null -eq $Token) {
        $Token = Get-NtToken -Effective -Access Query
    }
    elseif (!$Token.IsPseudoToken) {
        $Token = $Token.Duplicate()
    }

    Use-NtObject($Token) {
        if ($Group) {
            $Token.PrimaryGroup | Write-Output
        }
        else {
            $Token.Owner | Write-Output
        }
    }
}

<#
.SYNOPSIS
Get a token's mandatory policy.
.DESCRIPTION
This cmdlet will get the token's mandatory policy.
.PARAMETER Group
Specify to get the default group rather than default owner.
.PARAMETER Token
Optional token object to use to get group. Must be accesible for Query right.
.INPUTS
None
.OUTPUTS
The Token Mandatory Policy
.EXAMPLE
Get-NtTokenMandatoryPolicy
Get the mandatory policy for the current effective token.
.EXAMPLE
Get-NtTokenMandatoryPolicy -Token $token
Get default owner on an explicit token object.
#>
function Get-NtTokenMandatoryPolicy {
    [CmdletBinding()]
    Param(
        [NtApiDotNet.NtToken]$Token
    )
    if ($null -eq $Token) {
        $Token = Get-NtToken -Effective -Access Query
    }
    elseif (!$Token.IsPseudoToken) {
        $Token = $Token.Duplicate()
    }

    Use-NtObject($Token) {
        $Token.MandatoryPolicy
    }
}

<#
.SYNOPSIS
Remove privileges from a token.
.DESCRIPTION
This cmdlet will remove privileges from a token. Note that this completely removes the privilege, not just disable.
.PARAMETER Privileges
A list of privileges to remove.
.PARAMETER Token
Optional token object to use to remove privileges.
.INPUTS
None
.OUTPUTS
List of TokenPrivilege values indicating the new state of all privileges successfully modified.
.EXAMPLE
Remove-NtTokenPrivilege SeDebugPrivilege
Remove SeDebugPrivilege from the current effective token
.EXAMPLE
Remove-NtTokenPrivilege SeBackupPrivilege, SeRestorePrivilege -Token $token
Remove SeBackupPrivilege and SeRestorePrivilege from an explicit token object.
#>
function Remove-NtTokenPrivilege {
    Param(
        [Parameter(Mandatory = $true, Position = 0)]
        [alias("Privileges")]
        [NtApiDotNet.TokenPrivilegeValue[]]$Privilege,
        [NtApiDotNet.NtToken]$Token
    )
    if ($null -eq $Token) {
        $Token = Get-NtToken -Effective
    }
    else {
        $Token = $Token.Duplicate()
    }

    Use-NtObject($Token) {
        $result = @()
        foreach ($priv in $Privilege) {
            if (!$Token.RemovePrivilege($priv)) {
                Write-Warning "Can't remove $priv from token."
            }
        }
        return $result
    }
}

<#
.SYNOPSIS
Set the integrity level of a token.
.DESCRIPTION
This cmdlet will set the integrity level of a token. If you want to raise the level you must have SeTcbPrivilege otherwise you can only lower it.
If no token is specified then the current process token is used.
.PARAMETER IntegrityLevel
Specify the integrity level.
.PARAMETER Token
Optional token object to use to set privileges. Must be accesible for AdjustDefault right.
.PARAMETER Adjustment
Increment or decrement the IL level from the base specified in -IntegrityLevel.
.PARAMETER IntegrityLevelRaw
Specify the integrity level as a raw value.
.INPUTS
None
.EXAMPLE
Set-NtTokenIntegrityLevel Low
Set the current token's integrity level to low.
.EXAMPLE
Set-NtTokenIntegrityLevel Low -Token $Token
Set a specific token's integrity level to low.
.EXAMPLE
Set-NtTokenIntegrityLevel Low -Adjustment -16
Set the current token's integrity level to low minus 16.
.EXAMPLE
Set-NtTokenIntegrityLevel -IntegrityLevelRaw 0x800
Set the current token's integrity level to 0x800.
#>
function Set-NtTokenIntegrityLevel {
    [CmdletBinding(DefaultParameterSetName = "FromIL")]
    Param(
        [Parameter(Mandatory = $true, Position = 0, ParameterSetName = "FromIL")]
        [NtApiDotNet.TokenIntegrityLevel]$IntegrityLevel,
        [NtApiDotNet.NtToken]$Token,
        [Parameter(ParameterSetName = "FromIL")]
        [Int32]$Adjustment = 0,
        [Parameter(Mandatory = $true, Position = 0, ParameterSetName = "FromRaw")]
        [Int32]$IntegrityLevelRaw
    )
    switch ($PSCmdlet.ParameterSetName) {
        "FromIL" {
            $il_raw = $IntegrityLevel.ToInt32($null) + $Adjustment
        }
        "FromRaw" {
            $il_raw = $IntegrityLevelRaw
        }
    }

    if ($Token -eq $null) {
        $Token = Get-NtToken -Effective
    }
    else {
        $Token = $Token.Duplicate()
    }

    Use-NtObject($Token) {
        $Token.SetIntegrityLevelRaw($il_raw) | Out-Null
    }
}

<#
.SYNOPSIS
Get the integrity level of a token.
.DESCRIPTION
This cmdlet will gets the integrity level of a token.
.PARAMETER Token
Optional token object to use to get integrity level. Must be accesible for Query right.
.INPUTS
None
.OUTPUTS
NtApiDotNet.TokenIntegrityLevel
.EXAMPLE
Get-NtTokenIntegrityLevel
Get the current token's integrity level.
.EXAMPLE
Get-NtTokenIntegrityLevel -Token $Token
Get a specific token's integrity level.
#>
function Get-NtTokenIntegrityLevel {
    [CmdletBinding(DefaultParameterSetName = "FromIL")]
    Param(
        [Parameter(Position = 0)]
        [NtApiDotNet.NtToken]$Token
    )

    if ($null -eq $Token) {
        $Token = Get-NtToken -Effective
    }
    else {
        $Token = $Token.Duplicate()
    }

    Use-NtObject($Token) {
        $Token.IntegrityLevel | Write-Output
    }
}

<#
.SYNOPSIS
Opens an impersonation token from a process or thread using NtImpersonateThread
.DESCRIPTION
This cmdlet opens an impersonation token from a process using NtImpersonateThread. While SeDebugPrivilege
allows you to bypass the security of processes and threads it doesn't mean you can open the primary token.
This cmdlet allows you to get past that by getting a handle to the first thread and then impersonating it,
as long as the thread isn't impersonating something else you'll get back a copy of the primary token.
.PARAMETER ProcessId
A process to open to get the token from.
.PARAMETER ThreadId
A thread to open to get the token from.
.PARAMETER Access
Access rights for the opened token.
.INPUTS
None
.OUTPUTS
NtApiDotNet.NtToken
.EXAMPLE
Get-NtTokenFromProcess -ProcessId 1234
Gets token from process ID 1234.
.EXAMPLE
Get-NtTokenFromProcess -ProcessId 1234 -Access Query
Gets token from process ID 1234 with only Query access.
.EXAMPLE
Get-NtTokenFromProcess -ThreadId 1234
Gets token from process ID 1234.
#>
function Get-NtTokenFromProcess {
    [CmdletBinding(DefaultParameterSetName = "FromProcess")]
    Param(
        [Parameter(Position = 0, ParameterSetName = "FromProcess", Mandatory = $true)]
        [ValidateScript( { $_ -ge 0 })]
        [int]$ProcessId,
        [Parameter(ParameterSetName = "FromThread", Mandatory = $true)]
        [ValidateScript( { $_ -ge 0 })]
        [int]$ThreadId,
        [NtApiDotNet.TokenAccessRights]$Access = "MaximumAllowed"
    )

    Set-NtTokenPrivilege SeDebugPrivilege
    $t = $null

    try {
        if ($PsCmdlet.ParameterSetName -eq "FromProcess") {
            $t = Use-NtObject($p = Get-NtProcess -ProcessId $ProcessId) {
                $p.GetFirstThread("DirectImpersonation")
            }
        }
        else {
            $t = Get-NtThread -ThreadId $ThreadId -Access DirectImpersonation
        }

        $current = Get-NtThread -Current -PseudoHandle
        Use-NtObject($t, $current.ImpersonateThread($t)) {
            Get-NtToken -Impersonation -Thread $current -Access $Access
        }
    }
    catch {
        Write-Error $_
    }
}

<#
.SYNOPSIS
Prints the details of a token.
.DESCRIPTION
This cmdlet opens prints basic details about it a token.
.PARAMETER Token
Specify the token to format.
.PARAMETER All
Show all information.
.PARAMETER User
Show user information.
.PARAMETER Group
Show group information. Also prints capability sids and restricted sids if a sandboxed token.
.PARAMETER Privilege
Show privilege information.
.PARAMETER Integrity
Show integrity information.
.PARAMETER SecurityAttributes
Show token security attributes.
.PARAMETER UserClaims
Show token user claim attributes.
.PARAMETER DeviceClaims
Show token device claim attributes.
.PARAMETER TrustLevel
Show token trust level.
.PARAMETER Information
Show token information such as type, impersonation level and ID.
.PARAMETER Owner
Show token owner.
.PARAMETER PrimaryGroup
Show token primary group.
.PARAMETER DefaultDacl
Show token default DACL.
.PARAMETER FullDefaultDacl
Show the default DACL in full rather than a summary.
.PARAMETER Basic
Show basic token information, User, Group, Privilege and Integrity.
.PARAMETER MandatoryPolicy
Show mandatory integrity policy.
.OUTPUTS
System.String
.EXAMPLE
Format-NtToken -Token $token
Print the user name of the token.
.EXAMPLE
Format-NtToken -Token $token -Basic
Print basic details for the token.
.EXAMPLE
Format-NtToken -Token $token -All
Print all details for the token.
.EXAMPLE
Format-NtToken -Token $token -User -Group
Print the user and groups of the token.
.EXAMPLE
Format-NtToken -Token $token -DefaultDacl
Print the default DACL of the token.
.EXAMPLE
Format-NtToken -Token $token -FullDefaultDacl
Print the default DACL of the token in full.
#>
function Format-NtToken {
    [CmdletBinding(DefaultParameterSetName = "UserOnly")]
    Param(
        [parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
        [NtApiDotNet.NtToken]$Token,
        [parameter(ParameterSetName = "Complex")]
        [switch]$All,
        [parameter(ParameterSetName = "Complex")]
        [switch]$Basic,
        [parameter(ParameterSetName = "Complex")]
        [switch]$Group,
        [parameter(ParameterSetName = "Complex")]
        [switch]$Privilege,
        [parameter(ParameterSetName = "Complex")]
        [switch]$User,
        [parameter(ParameterSetName = "Complex")]
        [switch]$Integrity,
        [parameter(ParameterSetName = "Complex")]
        [switch]$SecurityAttributes,
        [parameter(ParameterSetName = "Complex")]
        [switch]$UserClaims,
        [parameter(ParameterSetName = "Complex")]
        [switch]$DeviceClaims,
        [parameter(ParameterSetName = "Complex")]
        [switch]$DeviceGroup,
        [parameter(ParameterSetName = "Complex")]
        [switch]$TrustLevel,
        [parameter(ParameterSetName = "Complex")]
        [switch]$Information,
        [parameter(ParameterSetName = "Complex")]
        [switch]$Owner,
        [parameter(ParameterSetName = "Complex")]
        [switch]$PrimaryGroup,
        [parameter(ParameterSetName = "Complex")]
        [switch]$DefaultDacl,
        [parameter(ParameterSetName = "Complex")]
        [switch]$FullDefaultDacl,
        [parameter(ParameterSetName = "Complex")]
        [switch]$MandatoryPolicy
    )

    if ($All) {
        $Group = $true
        $User = $true
        $Privilege = $true
        $Integrity = $true
        $SecurityAttributes = $true
        $DeviceClaims = $true
        $UserClaims = $true
        $TrustLevel = $true
        $Information = $true
        $Owner = $true
        $PrimaryGroup = $true
        $DefaultDacl = $true
        $DeviceGroup = $true
        $MandatoryPolicy = $true
    }
    elseif ($Basic) {
        $Group = $true
        $User = $true
        $Privilege = $true
        $Integrity = $true
    }

    if ($PSCmdlet.ParameterSetName -eq "UserOnly") {
        $token.User.ToString()
        return
    }

    if ($User) {
        "USER INFORMATION"
        "----------------"
        Format-ObjectTable $token.User.Sid | Write-Output
    }

    if ($Owner) {
        "OWNER INFORMATION"
        "---------------- "
        Format-ObjectTable $token.Owner | Write-Output
    }

    if ($PrimaryGroup) {
        "PRIMARY GROUP INFORMATION"
        "-------------------------"
        Format-ObjectTable $token.PrimaryGroup | Write-Output
    }

    if ($Group) {
        if ($Token.GroupCount -gt 0) {
            "GROUP SID INFORMATION"
            "-----------------"
            Format-ObjectTable $token.Groups | Write-Output
        }

        if ($token.AppContainer -and $token.Capabilities.Length -gt 0) {
            "APPCONTAINER INFORMATION"
            "------------------------"
            Format-ObjectTable $token.AppContainerSid | Write-Output
            "CAPABILITY SID INFORMATION"
            "----------------------"
            Format-ObjectTable $token.Capabilities | Write-Output
        }

        if ($token.Restricted -and $token.RestrictedSids.Length -gt 0) {
            if ($token.WriteRestricted) {
                "WRITE RESTRICTED SID INFORMATION"
                "--------------------------------"
            }
            else {
                "RESTRICTED SID INFORMATION"
                "--------------------------"
            }
            Format-ObjectTable $token.RestrictedSids | Write-Output
        }
    }

    if ($Privilege -and $Token.Privileges.Length -gt 0) {
        "PRIVILEGE INFORMATION"
        "---------------------"
        Format-ObjectTable $token.Privileges | Write-Output
    }

    if ($Integrity) {
        "INTEGRITY LEVEL"
        "---------------"
        Format-ObjectTable $token.IntegrityLevel | Write-Output
    }

    if ($MandatoryPolicy) {
        "MANDATORY POLICY"
        "----------------"
        Format-ObjectTable $token.MandatoryPolicy | Write-Output
    }

    if ($TrustLevel) {
        $trust_level = $token.TrustLevel
        if ($trust_level -ne $null) {
            "TRUST LEVEL"
            "-----------"
            Format-ObjectTable $trust_level | Write-Output
        }
    }

    if ($SecurityAttributes -and $Token.SecurityAttributes.Length -gt 0) {
        "SECURITY ATTRIBUTES"
        "-------------------"
        Format-ObjectTable $token.SecurityAttributes | Write-Output
    }

    if ($UserClaims -and $Token.UserClaimAttributes.Length -gt 0) {
        "USER CLAIM ATTRIBUTES"
        "-------------------"
        Format-ObjectTable $token.UserClaimAttributes | Write-Output
    }

    if ($DeviceClaims -and $Token.DeviceClaimAttributes.Length -gt 0) {
        "DEVICE CLAIM ATTRIBUTES"
        "-------------------"
        Format-ObjectTable $token.DeviceClaimAttributes | Write-Output
    }

    if ($DeviceGroup -and $Token.DeviceGroups.Length -gt 0) {
        "DEVICE GROUP SID INFORMATION"
        "----------------------------"
        Format-ObjectTable $token.DeviceGroups | Write-Output
    }

    if (($DefaultDacl -or $FullDefaultDacl) -and ($null -ne $Token.DefaultDacl)) {
        $summary = !$FullDefaultDacl
        "DEFAULT DACL"
        Format-NtAcl -Acl $Token.DefaultDacl -Type "Directory" -Name "------------" -Summary:$summary | Write-Output
        if ($summary) {
            Write-Output ""
        }
    }

    if ($Information) {
        "TOKEN INFORMATION"
        "-----------------"
        "Type          : {0}" -f $token.TokenType
        if ($token.TokenType -eq "Impersonation") {
            "Imp Level     : {0}" -f $token.ImpersonationLevel
        }
        "ID            : {0}" -f $token.Id
        "Auth ID       : {0}" -f $token.AuthenticationId
        "Origin ID     : {0}" -f $token.Origin
        "Modified ID   : {0}" -f $token.ModifiedId
        "Session ID    : {0}" -f $token.SessionId
        "Elevated      : {0}" -f $token.Elevated
        "Elevation Type: {0}" -f $token.ElevationType
        "Flags         : {0}" -f $token.Flags
    }
}

<#
.SYNOPSIS
Prints the details of the current token.
.DESCRIPTION
This cmdlet opens the current token and prints basic details about it. This is similar to the Windows whoami
command but runs in process and will print information about the current thread token if you're impersonating.
.PARAMETER All
Show all information.
.PARAMETER User
Show user information.
.PARAMETER Group
Show group information. Also prints capability sids and restricted sids if a sandboxed token.
.PARAMETER Privilege
Show privilege information.
.PARAMETER Integrity
Show integrity information.
.PARAMETER SecurityAttributes
Show token security attributes.
.PARAMETER UserClaims
Show token user claim attributes.
.PARAMETER DeviceClaims
Show token device claim attributes.
.PARAMETER TrustLevel
Show token trust level.
.PARAMETER Information
Show token information such as type, impersonation level and ID.
.PARAMETER Owner
Show token owner.
.PARAMETER PrimaryGroup
Show token primary group.
.PARAMETER DefaultDacl
Show token default DACL.
.PARAMETER FullDefaultDacl
Show the default DACL in full rather than a summary.
.PARAMETER Basic
Show basic token information, User, Group, Privilege and Integrity.
.PARAMETER MandatoryPolicy
Show mandatory integrity policy.
.PARAMETER Thread
Specify a thread to use when capturing the effective token.
.OUTPUTS
Text data
.EXAMPLE
Show-NtTokenEffective
Show only the user name of the current token.
.EXAMPLE
Show-NtTokenEffective -All
Show all details for the current token.
.EXAMPLE
Show-NtTokenEffective -Basic
Show basic details for the current token.
.EXAMPLE
Show-NtTokenEffective -User -Group
Show the user and groups of the current token.
#>
function Show-NtTokenEffective {
    [CmdletBinding(DefaultParameterSetName = "UserOnly")]
    Param(
        [parameter(ParameterSetName = "Complex")]
        [switch]$All,
        [parameter(ParameterSetName = "Complex")]
        [switch]$Basic,
        [parameter(ParameterSetName = "Complex")]
        [switch]$Group,
        [parameter(ParameterSetName = "Complex")]
        [switch]$Privilege,
        [parameter(ParameterSetName = "Complex")]
        [switch]$User,
        [parameter(ParameterSetName = "Complex")]
        [switch]$Integrity,
        [parameter(ParameterSetName = "Complex")]
        [switch]$SecurityAttributes,
        [parameter(ParameterSetName = "Complex")]
        [switch]$UserClaims,
        [parameter(ParameterSetName = "Complex")]
        [switch]$DeviceClaims,
        [parameter(ParameterSetName = "Complex")]
        [switch]$TrustLevel,
        [parameter(ParameterSetName = "Complex")]
        [switch]$Information,
        [parameter(ParameterSetName = "Complex")]
        [switch]$Owner,
        [parameter(ParameterSetName = "Complex")]
        [switch]$PrimaryGroup,
        [parameter(ParameterSetName = "Complex")]
        [switch]$DefaultDacl,
        [parameter(ParameterSetName = "Complex")]
        [switch]$FullDefaultDacl,
        [parameter(ParameterSetName = "Complex")]
        [switch]$MandatoryPolicy,
        [NtApiDotNet.NtThread]$Thread
    )

    Use-NtObject($token = Get-NtToken -Effective -Thread $Thread) {
        if ($PsCmdlet.ParameterSetName -eq "UserOnly") {
            Format-NtToken -Token $token
        }
        else {
            $args = @{
                All                = $All
                Basic              = $Basic
                Group              = $Group
                Privilege          = $Privilege
                User               = $User
                Integrity          = $Integrity
                SecurityAttributes = $SecurityAttributes
                UserClaims         = $UserClaims
                DeviceClaims       = $DeviceClaims
                TrustLevel         = $TrustLevel
                Information        = $Information
                Owner              = $Owner
                PrimaryGroup       = $PrimaryGroup
                Token              = $token
                DefaultDacl        = $DefaultDacl
                FullDefaultDacl    = $FullDefaultDacl
                MandatoryPolicy    = $MandatoryPolicy
            }
            Format-NtToken @args
        }
    }
}

function Start-NtTokenViewer {
    param(
        [Parameter(Mandatory = $true, Position = 0)]
        [NtApiDotNet.NtObject]$Handle,
        [string]$Text
    )

    Use-NtObject($dup_handle = $Handle.Duplicate()) {
        $dup_handle.Inherit = $true
        $cmdline = [string]::Format("TokenViewer --handle={0}", $dup_handle.Handle.DangerousGetHandle())
        if ($Text -ne "") {
            $cmdline += " ""--text=$Text"""
        }
        $config = New-Win32ProcessConfig $cmdline -ApplicationName "$PSScriptRoot\TokenViewer.exe" -InheritHandles
        $config.InheritHandleList.Add($dup_handle.Handle.DangerousGetHandle())
        Use-NtObject(New-Win32Process -Config $config) { }
    }
}

<#
.SYNOPSIS
Display a UI viewer for a NT token.
.DESCRIPTION
This function will create an instance of the TokenViewer application to display the opened token.
.PARAMETER Token
The token to view.
.PARAMETER Text
Additional text to show in title bar for this token.
.PARAMETER Process
The process to display the token for.
.PARAMETER ProcessId
A process ID of a process to display the token for.
.PARAMETER Name
The name of a process to display the token for.
.PARAMETER MaxTokens
When getting the name/command line only display at most this number of tokens.
.PARAMETER All
Show dialog with all access tokens.
.PARAMETER RunAsAdmin
Specify to elevate the process to admin.
.PARAMETER ServiceName
Specify the name of a service to display the token for.
.INPUTS
None
.OUTPUTS
None
.EXAMPLE
Show-NtToken
Display the primary token for the current process.
.EXAMPLE
Show-NtToken -ProcessId 1234
Display the primary token for the process with PID 1234.
.EXAMPLE
Show-NtToken -Process $process
Display the primary token for the process specified with an NtProcess object.
.EXAMPLE
$ps | Select-Object -First 5 | Show-NtToken
Display the first 5 primary tokens from a list of processes.
.EXAMPLE
Show-NtToken -Token $token
Display the token specified with an NtToken object.
.EXAMPLE
Show-NtToken -Name "notepad.exe"
Display the primary tokens from accessible processes named notepad.exe.
.EXAMPLE
Show-NtToken -Name "notepad.exe" -MaxTokens 5
Display up to 5 primary tokens from accessible processes named notepad.exe.
.EXAMPLE
Show-NtToken -All
Show a list of all accessible tokens to choose from.
.EXAMPLE
Show-NtToken -All -RunAsAdmin
Show a list of all accessible tokens to choose from and run as an administrator.
.EXAMPLE
Show-NtToken -ServiceName "AppInfo"
Display the primary token for the AppInfo service.
#>
function Show-NtToken {
    [CmdletBinding(DefaultParameterSetName = "FromPid")]
    param(
        [Parameter(Mandatory, Position = 0, ParameterSetName = "FromToken", ValueFromPipeline)]
        [NtApiDotNet.NtToken]$Token,
        [Parameter(Mandatory, Position = 0, ParameterSetName = "FromProcess", ValueFromPipeline)]
        [NtApiDotNet.NtProcess]$Process,
        [Parameter(Position = 0, ParameterSetName = "FromPid")]
        [int]$ProcessId = $pid,
        [Parameter(Mandatory, ParameterSetName = "FromName")]
        [string]$Name,
        [Parameter(Mandatory, ParameterSetName = "FromCommandLine")]
        [string]$CommandLine,
        [Parameter(ParameterSetName = "FromName")]
        [Parameter(ParameterSetName = "FromCommandLine")]
        [int]$MaxTokens = 0,
        [Parameter(Mandatory, ParameterSetName = "FromServiceName")]
        [string]$ServiceName,
        [Parameter(ParameterSetName = "All")]
        [switch]$All,
        [Parameter(ParameterSetName = "All")]
        [Parameter(ParameterSetName = "FromPid")]
        [Parameter(ParameterSetName = "FromServiceName")]
        [switch]$RunAsAdmin
    )

    PROCESS {
        if (-not $(Test-Path "$PSScriptRoot\TokenViewer.exe" -PathType Leaf)) {
            Write-Error "Missing token viewer application $PSScriptRoot\TokenViewer.exe"
            return
        }

        $verb = "open"
        if ($RunAsAdmin) {
            $verb = "runas"
        }

        switch ($PSCmdlet.ParameterSetName) {
            "FromProcess" {
                $text = "$($Process.Name):$($Process.ProcessId)"
                Start-NtTokenViewer $Process -Text $text
            }
            "FromName" {
                Use-NtObject($ps = Get-NtProcess -Name $Name -Access QueryLimitedInformation) {
                    $result = $ps
                    if ($MaxTokens -gt 0) {
                        $result = $ps | Select-Object -First $MaxTokens
                    }
                    $result | Show-NtToken
                }
            }
            "FromCommandLine" {
                Use-NtObject($ps = Get-NtProcess -CommandLine $CommandLine -Access QueryLimitedInformation) {
                    $result = $ps
                    if ($MaxTokens -gt 0) {
                        $result = $ps | Select-Object -First $MaxTokens
                    }
                    $result | Show-NtToken
                }
            }
            "FromPid" {
                $cmdline = "--pid={0}" -f $ProcessId
                Start-Process "$PSScriptRoot\TokenViewer.exe" -ArgumentList $cmdline -Verb $verb
            }
            "FromServiceName" {
                $cmdline = """--service={0}""" -f $ServiceName
                Start-Process "$PSScriptRoot\TokenViewer.exe" -ArgumentList $cmdline -Verb $verb
            }
            "FromToken" {
                Start-NtTokenViewer $Token
            }
            "All" {
                Start-Process "$PSScriptRoot\TokenViewer.exe" -Verb $verb
            }
        }
    }
}


text:
Latest owner of historic Walcourt building near downtown OKC plans to create office space
by Steve Lackmeyer
Published: Fri, February 23, 2018 5:00 AM
The Walcourt, shown in this photo taken shortly after it opened in 1928, was promoted as an upscale apartment community. [Photo courtesy of the Oklahoma Historical Society]
Redevelopment is set to resume on the historic Walcourt, but after a second change in ownership, the plan is changing from apartments to offices.
The Walcourt, built almost a century ago at 141 NE 13, stood empty and boarded up for more than 40 years before it was sold in September to residential developer Brent Swift. He cleaned up the property and started design work. By Thanksgiving, Swift was in discussions with several potential buyers to take over the project.
The buyer ultimately chosen by Swift, Walcourt Partners LLC led by Steven Morris, had twice attempted to acquire the Walcourt and had been in discussions with the longtime former owner, Mary Williams, before she did the deal with Swift.
"I felt that the only thing that works there is office space," Morris said. "It was built with about a dozen efficiency units. There were no kitchens; it was a central dining room for each floor. The problem with the building — it's about 9,500 square feet and it's $200 per square foot to finish out no matter what you look at."
Morris said his estimates matched with those tallied by Swift, who is a residential developer. Morris, meanwhile, has a long history in historic commercial development that includes office and residential properties.
"He really loves the building," Morris said. "But Brent had other stuff he really wanted to do. And this would have prevented him from doing that. We hit it off. I listened to his concerns, I think I passed his muster and we got the deal done."
Swift, who is building the 701 Hudson condominiums in nearby Midtown, said the sale did assist him in financing other projects downtown. He admired Morris' work that dates back to redevelopment of the former Alpha Chi Omega sorority house at 103 W Boyd in Norman into the Casa Blanca office building.
"For us, we had some other things on our radar downtown that we wanted to pursue, and we could achieve that with them buying it from us," Swift said. "Either way, the numbers are tight. Any time you get into historic redevelop of a building like this, it's challenging. But from a numbers standpoint, offices for buildings like this make sense. Those buildings have small rooms."
Morris is seeking rezoning of the property and closing an unused alley to allow the building to be converted to offices. He plans to build apartments on the adjoining acre of land once the Walcourt project is complete.
He said work will start with repair and preservation of the exterior, with design work by architect Catherine Montgomery.
"We have brickwork underway and new metal security doors going up this week," Morris said. "We are going to bring in temporary power. We're going to replace the roof and we've found the French lock singles to match what is there. We're also recasting the brick and stone.
"We will then start marketing so we can get a single tenant or a tenant for each floor," he said.
Morris said his partners have long wanted to acquire the Walcourt and bring it back to life.
"We are die-hard historic preservationists," Morris said. "There is no plan to sell it. This will be a longtime hold for us."
The Walcourt at 141 NE 13 enjoys a view of downtown that is guaranteed never to be obstructed due to the building's location along Interstate 235. New owner Steven Morris is preparing to convert it into offices. [Photo by Nate Billings, The Oklahoman]
Steve Lackmeyer
Steve Lackmeyer is a reporter, columnist and author who started his career at The Oklahoman in 1990. Since then, he has won numerous awards for his coverage, which included the 1995 bombing of the Alfred P. Murrah Federal Building, the city's... Read more ›
CommentsLatest owner of historic Walcourt building near downtown OKC plans to create office space


Can I be ordered to mediation?
Yes, you can, and in some cases, in some areas, you will be. In the Fourteenth Judicial Circuit, for example, there is a standing order in family law cases requiring the parties to go to a mediation and try and settle their case outside of court, prior to setting a final hearing. That can be waived if good cause is shown, but that is actually the order. The assumption is that you're going to be going to mediation before you reach final hearing. (silence).


Would have to be our thirst quenching Fiano. This wine is high in minerality, has elements of tropical fruit with natural acidity, providing a long zesty finish. All the refreshing elements needed for a day on a desert island.
Kicking back on a desert Island with a glass of Fiano in hand, would definitely be enjoyed to the tunes of Flight Facilities or Crystal Castles.
SignorVino is a newly established wine brand created by The Winery, a family owned estate based in the Riverina region of NSW. The Winery is known for its specialty in producing unique Italian wine varietals and credited for its innovative labels.
The Guglielmino family's passion for food and wine is undeniable and is evident in not only the varietals they select to produce but the wine they make. Their roots are embedded on the shores of Sicily, where the pebbles lie black and the Mediterranean sun radiates beyond the almighty Mt Etna. It is there the family learnt the ancient skill of making wine and where much inspiration is drawn.


text:
Having edited picture and sound, and having mixed numerous Oscar-winning films, Todd brings a wealth of filmmaking experience and sensitivity to his scoring work. Above all, he strives to make each score feel like it couldn't have been composed for any other film.
With an Oscar, an Emmy, and numerous other awards and nominations to his name, he has worked with a stellar list of filmmakers: David Fincher, Carroll Ballard, David Lynch, Jon Else, Milos Forman, Philip Kaufman, Peter Weir, James Redford, David Peoples, Bill Couturié, Kris Samuelson and John Haptas, Dan Geller and Dayna Goldfine, and Lourdes Portillo, among many others.
Epiphany - My Love Affair With the Brain
Saving Eden - Elephant Sunset
Adios Amor - Montage
Adios Amor - Stars
* Emmy for score ** Emmy nomination for score
see more credits
"Todd Boekelheide's jazz-infused score heightens the feeling that you're not watching a documentary as much as a taut, true-life contemporary thriller."
- review of 3½ Minutes, Ten Bullets
" . . . Todd Boekelheide's Celtic-flavored score is a major plus."
- review of Digger
". . . unforgettable . . . so exquisitely filmed, edited and scored it is the documentary equivalent of a tragic epic poem."
- review of Regret to Inform
"Playing a major role in drawing the viewer into the film is Todd Boekelheide's gorgeous guitar and orchestral score . . . the music is lovely."
- review of Nina Takes a Lover
" . . . ace documentarian Jon Else and musician Todd Boekelheide create their own special mood . . . the film is simply gorgeous."
- review of Yosemite: The Fate of Heaven
". . . Plaudits also to Todd Boekelheide for his rich, evocative and occasionally haunting music."
- review of The Outsider
Contact Todd Boekelheide using the form below.


text:
Notre Dame Notre Dame
Brett Kavanaugh (left) speaks in 2006, when he was a nominee for the D.C. Circuit Court of Appeals. With him is then-Senate Majority Leader Bill Frist of Tennessee. Chip Somodevilla/Getty Images hide caption
Trump's Top 2 Supreme Court Picks Reflect Warring Republican Factions
July 6, 2018 • Supporters and opponents of Judges Brett Kavanaugh and Amy Barrett have waged a fierce battle for their candidate. But are the differences little more than a summer camp color war?
Notre Dame's Arike Ogunbowale celebrates by cutting down the net after a 61-58 victory over Mississippi State in the final of the women's NCAA basketball tournament Sunday in Columbus, Ohio. Tony Dejak/AP hide caption
Tony Dejak/AP
WATCH: This Last-Second Shot Gave Notre Dame The Women's Basketball Crown
April 2, 2018 • With 0.1 seconds left on the clock, guard Arike Ogunbowale hit a 3-pointer to give Notre Dame the NCAA championship over Mississippi State 61-58 Sunday night in Columbus, Ohio.
The show celebrates the Gothic cathedral's role in French history as well as the end of the First World War. Christophe Ena/AP hide caption
Christophe Ena/AP
Spectacular Light Show At Notre Dame Cathedral Commemorates World War I
November 10, 2017 • A stunning display of color and technology illuminates the medieval cathedral's facade and tells a story about history, war and survival.
Jonathan Daniel/Getty Images
In Reversal, Notre Dame Says Health Plans Will Still Cover Birth Control
November 7, 2017 • The Catholic university had previously said that contraceptive coverage would terminate within the year. Now it says third-party providers will continue to serve faculty, students and staff.
Notre Dame is the "first and most important employer publicly to take advantage" of the rollback, The Los Angeles Times says. Michael Conroy/AP hide caption
Michael Conroy/AP
Notre Dame Is Dropping Birth Control Coverage For Students, Employees
November 3, 2017 • The Catholic university had challenged the Affordable Care Act's mandate that employers cover birth control. Now it's taking advantage of the Trump administration's weakening of that rule.
French police gather near the site of an attack near the entrance of Notre Dame Cathedral in Paris on Tuesday. Anti-terrorist prosecutors have opened an investigation after police shot and injured a man who had tried to attack officers with a hammer. One officer was slightly injured. Bertrand Guay/AFP/Getty Images hide caption
Bertrand Guay/AFP/Getty Images
Paris Police Shoot, Wound Hammer-Wielding Assailant Outside Notre Dame
June 6, 2017 • France's interior minister says a man yelled "this is for Syria" as he attacked officers with a hammer; the incident is being investigated as a terrorist attack. One officer suffered minor injuries.
The Basilica of the Sacred Heart on the campus of the University of Notre Dame in South Bend, Ind. Joe Raymond/AP hide caption
Joe Raymond/AP
Protesting Students Walk Out On Pence's Address At Notre Dame
May 21, 2017 • Student organizers said they walked out because Pence's policies "have marginalized our vulnerable sisters and brothers for their religion, skin color, or sexual orientation."
The Notre Dame Leprechaun mascot runs onto the field before a 2013 game between the Fighting Irish and the Navy Midshipmen at Notre Dame Stadium in South Bend, Indiana. Notre Dame defeated Navy 38-34. The school has been ordered to vacate all its victories that season, as well as those in the season before. Jonathan Daniel/Getty Images hide caption
Notre Dame Must Vacate 2012, 2013 Football Wins Over Academic Violations
November 22, 2016 • The NCAA says a former student athletic trainer violated ethical conduct by completing coursework for football players. The Fighting Irish say they will appeal the NCAA's decision.
In this Sept. 15, 1930, photo, coach Knute Rockne puts his football proteges through the first football drill of the season at Cartier Field, South Bend, Ind. Rockne finished his career with an .860 winning percentage and delivered the famous "Win one for the Gipper" speech. AP hide caption
Football, Notre Dame And Winning 'For The Gipper'
October 7, 2015 • Commentator Frank Deford marks the 75th anniversary of the college football movie Knute Rockne, All-American, which included a famous phrase, uttered by the movie's star, Ronald Reagan.
Jewell Loyd and the Notre Dame Fighting Irish will again face Kaleena Mosqueda-Lewis and the Connecticut Huskies in the NCAA Women's Basketball Tournament Championship. They're seen here in last year's title game. Frederick Breedon/Getty Images hide caption
Frederick Breedon/Getty Images
Three-Peat Or Upset? UConn And Notre Dame Play For Women's NCAA Title
April 7, 2015 • For Notre Dame, tonight brings a chance to overcome years of frustration. In three of the past four years, the team has lost in the championship game.
Morgan Tuck of the Connecticut Huskies shoots against Shatori Walker-Kimbrough of the Maryland Terrapins during the NCAA women's Final Four in Tampa, Fla. Mike Carlson/Getty Images hide caption
Mike Carlson/Getty Images
Connecticut, Notre Dame Will Meet In Women's Championship Game
April 5, 2015 • Basketball powerhouse UConn has a chance at their 10th title after beating Maryland 81-58. They'll meet Notre Dame, who defeated South Carolina by one point earlier Sunday, in Tuesday's finals.
Supreme Court Revives Notre Dame's Appeal In Contraception Case
March 9, 2015 • Last February, the U.S. Circuit Court of Appeals in Chicago backed a lower court's ruling that dismissed Notre Dame's challenge. That decision was vacated Monday.
The Michigan Wolverines defeated the Notre Dame Fighting Irish Saturday night, 41-30 — and then celebrated by playing some polka. Here, the Irish's Chris Brown is tackled by Michigan's Delonte Hollowell after making a catch. Gregory Shamus/Getty Images hide caption
Michigan Beats Notre Dame, Plays 'Chicken Dance' Song
September 8, 2013 • Last night's college football game between the University of Michigan and Notre Dame was the final match-up between the longtime rivals to be played in Ann Arbor for a while. And Notre Dame's looming suspension of the teams' long-time rivalry inspired a unique musical choice.
Manti Te'o during his interview with Katie Couric. ABCNews.go.com hide caption
ABCNews.go.com
Manti Te'o Says He Lied After Learning 'Girlfriend' Was A Hoax
January 23, 2013 • The Notre Dame football star tells Katie Couric he was the victim of a hoax. But he also admits he perpetuated the myth about a dead girlfriend after discovering she had never been real. "Put yourself in my situation," he says. "What would you do?"
Lizzy Seeberg, in a family photo broadcast by ABC News. ABCNews.go.com hide caption
More Tears For Notre Dame's 'Fake Tragedy' Than A Real Girl's Death?
January 18, 2013 • Those who have been pushing for the university to take more action about reports of football players sexually assaulted young women are asking why so much attention was given to the story of star Manti Te'o's fictitious girlfriend.
More from Notre Dame


text:
by Mvslim May 6, 2018, 11:18 am in Entertainment
Mukadass Is the Perfect Example of How Playing Sports Can Be Very Empowering for Women
A teenage Scottish Muslim's dedication to break down stereotypes and encourage fellow Muslim students to join the sports' courts has earned her a Sunday Mail Young Scot nomination in the Equality And Diversity category.
"Muslim women haven't been given the opportunity to become great athletes. There could be the next Andy Murray or Michael Jordan from our community out there but you would never know," Mukadass Javaid, 17, told The Daily Record. "Sport gives Muslim girls the chance to grow and flourish. All we need to do is break down the barriers."
Mukadass, 17, helps run a weekly project for Muslim girls at Glasgow's Hillhead High School, where they are coached in a variety of sports including basketball, netball, and badminton. She believes that if Muslim girls received the right encouragement, they will soon make sport's history.
"I think some are afraid of what their parents might think because, traditionally and culturally, the sport is not something young Muslim girls do or are expected to do. So many good things come from sport and it is a real shame that some young people have felt they cannot participate due to their faith or religion," she added.
The schoolgirl, who helped her basketball team reach the final of the 2018 Glasgow Schools' Cup, added, "For me, my culture and sport go hand in hand. There are lots of sports young Muslim women can do without having to be disrespectful to our customs. Basketball is just one of them."
Mukadass' efforts are not limited to sports. The young hijabi Muslim student also helps younger pupils with their reading. "I play basketball in my hijab and cover my arms and legs so I am not going against my culture in any way. Last year, basketball's governing body FIBA lifted the ban on headscarves for female professional athletes, acknowledging it causes no obstruction in the sport." Mukadess also reaffirms the importance of representation for teenagers: "Nike has just brought out a pro-hijab for female competitors. I haven't got one yet but I'm thinking about it. If the big sports companies are moving with the times, then so should we."
History of Success
Mukadass has also won several medals with her school team. "I started to play basketball when I was in primary six and then, when I got to high school, I started to take it really seriously. Before the girls' team was formed in the third year, I trained with boys," she said. "We were playing a team from England a while back. I was the only girl wearing a headscarf and afterward, the visiting headteacher came over and said, 'Wow, how is this possible? You wouldn't see that happening in England. I wish it would.
"Not long after, the PE department decided to set up the Muslim Girls' Sports Project and I've been involved with it ever since." The sessions, which are on every Tuesday morning before school, was given funding from Children In Need.
Mukadass, who hopes to study maths at university next year, said: "I went round all the assemblies encouraging girls to come along. It has proved really popular. "I've been shortlisted for a place on the Young People's Sports Panel. I really hope I get a place so I can give young Muslims a voice – sports Scotland have the knowledge and knowhow to make positive changes." She added: "I'm lucky to go to a really sporty school but I would love projects like we have to be rolled out across Glasgow and the rest of Scotland."
Basketballbreaking stereotypesEuropeHijabHijabiSportwomen empowerment
Previous article A Mosque that Looks as Charming as It Sounds: This is India's 'Charminar'
Next article Following the Friday Sermon in Sign Language: This Mosque Is All About Love and Inclusiveness
Referee Forces Muslim Teen To Leave Basketball Game Because Of Her Headscarf
Meet Khadijah Mellah, First Hijabi Jockey on British Racecourse!
in Food & Health
Zahra Lari Is World's First Hijabi To Compete Internationally As A Professional Ice Skater
in Daily Life, Entertainment
in Fashion, Women
"I Fight Prejudices by Boxing with My Headscarf" – Nike Pro Hijab Ambassador Zeina Nassar Is Proving Everyone Wrong
Soccer-Mad Assmaah Wants to Encourage Muslim Girls to Play Football
Mvslim Picks: Top 6 Muslim Podcasts of 2020
AW20'S BIGGEST MODEST TRENDS – AND HOW TO WEAR THEM NOW
by Mvslim September 22, 2020, 2:16 pm
Why Muslims Must Go To South America – BBC's Race Across The World Winners Share All Things South America, Spirituality and Faith From Their Recent Win
11 Types of Muslims We All Know In Ramadan
by Mvslim April 26, 2020, 3:30 pm